ASP .NET Web API ModelBinder单个参数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ASP .NET Web API ModelBinder单个参数相关的知识,希望对你有一定的参考价值。

目前我有这个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,但我真正想要做的是仅映射Model的Media字段和所有其他字段以映射为默认值。

这是我的控制器:

public HttpResponseMessage Post([ModelBinder(typeof(FooModelBinder))] Foo request)
        
            //do something
        

这可以实现吗?

答案

以下是我们所有模型绑定器的定义方式:

公共类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)
    
       ... 
    

我可能误解了你的问题,但这是我们系统中真实代码的一个例子。

以上是关于ASP .NET Web API ModelBinder单个参数的主要内容,如果未能解决你的问题,请参考以下文章