目前,我已经有了这个ModelBinder,它工作得很好:
public class FooModelBinder : IModelBinder
{
public bool BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext)
{
var body = JObject.Parse(actionContext.Request.Content.ReadAsStringAsync().Result);
IEnumerable<Foo1> media = new List<Foo1>();
var transaction = body.ToObject<Foo2>();
media = body["Media"].ToObject<List<Foo3>>();
transaction.Media = media;
bindingContext.Model = transaction;
return true;
}
}正如您所看到的,我映射的是整个bindingContext.Model,但我真正想做的是只映射模型的媒体字段和映射为默认的所有其他字段。
这是我的控制器:
public HttpResponseMessage Post([ModelBinder(typeof(FooModelBinder))] Foo request)
{
//do something
}这是可以实现的吗?
发布于 2018-08-30 07:29:12
下面是我们所有的模型绑定器的定义:
公共类FooBinder : IModelBinder {
public bool BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext)
{
if (bindingContext.ModelType == typeof(Foo))
{
return FooParameter(actionContext, bindingContext);
}
return false;
}如果想从输入中创建多个参数,只需在控制器方法中指定所需的绑定器即可。
public async Task<HttpResponseMessage> GetFoo(
[ModelBinder] Foo1 foo1 = null, [ModelBinder] Foo2 foo2 = null)
{
...
}我可能误解了你的问题,但这是我们系统中真正的代码示例。
https://stackoverflow.com/questions/52084903
复制相似问题