来自 json 的 webapi 2 绑定模型
webapi 2 bind model from json
我需要从请求绑定模型并转换为我的自定义对象,我的请求数据是 json,方法是 post。
这是我在网络上的方法api:
public IHttpActionResult Edit([ModelBinder(typeof(KModelBinder))] object data)
我的问题是:我无法从 modelbinder 中的 ValueProvider
访问 json。
public class KModelBinder : IModelBinder {
public bool BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext) {
var valueProvider = bindingContext.ValueProvider;
var valProviderResult = valueProvider.GetValue("id");
// ....
}
}
你可以试试这样的基础控制器class
public class BaseController<T>: ApiController
{
//here you can add whatever dependency injection you may use
public BaseController(DbContext context)
{
_context = context;
}
[HttpPost]
public IHttpActionResult Add(T data)
{
return Ok(_context.Add(data));
}
[HttpPut]
public IHttpActionResult Edit(T data)
{
_context.Modify(data); //here depends on your ORM or data access layer
return Ok(data);
}
/*other methods you think are necessary in this base controller*/
}
之后你可以像这样定义你的控制器
public class UserController: BaseController<User>
{
//here you can override the base controller methods
}
我在我当前的项目中使用了一些类似的方法并且工作正常。
检查一下,看看这是否适用于您的项目。
我需要从请求绑定模型并转换为我的自定义对象,我的请求数据是 json,方法是 post。
这是我在网络上的方法api:
public IHttpActionResult Edit([ModelBinder(typeof(KModelBinder))] object data)
我的问题是:我无法从 modelbinder 中的 ValueProvider
访问 json。
public class KModelBinder : IModelBinder {
public bool BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext) {
var valueProvider = bindingContext.ValueProvider;
var valProviderResult = valueProvider.GetValue("id");
// ....
}
}
你可以试试这样的基础控制器class
public class BaseController<T>: ApiController
{
//here you can add whatever dependency injection you may use
public BaseController(DbContext context)
{
_context = context;
}
[HttpPost]
public IHttpActionResult Add(T data)
{
return Ok(_context.Add(data));
}
[HttpPut]
public IHttpActionResult Edit(T data)
{
_context.Modify(data); //here depends on your ORM or data access layer
return Ok(data);
}
/*other methods you think are necessary in this base controller*/
}
之后你可以像这样定义你的控制器
public class UserController: BaseController<User>
{
//here you can override the base controller methods
}
我在我当前的项目中使用了一些类似的方法并且工作正常。
检查一下,看看这是否适用于您的项目。