.net核心模型绑定到Collection

时间:2017-03-16 10:43:16

标签: c# asp.net-core .net-core

我有一个模型如下

public class PeopleRequest
{
 public string Name {get; set;}
 public DateTime DOB {get; set;}
 public IEnumerable<string> Titles { get; set;} 
}

我的控制器中有这个API方法

[HttpGet]
public ActionResult GetPeople(PeopleRequest request)
{}

我的模型绑定类:

public class RequestModelBinderProvider : IModelBinderProvider
{

   public IModelBinder GetBinder(ModelBinderProviderContext context)
    {
        if (context == null) throw new ArgumentNullException(nameof(context));

        if (!context.Metadata.IsComplexType)
        {
            // Look for scrubber attributes
            var propName = context.Metadata.PropertyName;
            if (!string.IsNullOrEmpty(propName))
            {
                var propInfo = context.Metadata.ContainerType.GetProperty(propName);
                return new SimpleTypeModelBinder(context.Metadata.ModelType);
            }
        }
        else
        {
            var propName = context.Metadata.PropertyName;
            if (!string.IsNullOrEmpty(propName))
            {
                var propInfo = context.Metadata.ContainerType.GetProperty(propName);
                var isIEnumerableFormFiles = context.Metadata.ModelType.GetInterfaces().Contains(typeof(IEnumerable<string>));
                return new CollectionModelBinder<List<string>>(new SimpleTypeModelBinder(typeof(string)));

            }
        }

        return null;
    }
}

现在我的问题:

当我用这样的uri调用这个方法时:

http://localhost:2209/api/person/complex/request?request.Name=JOE&request.DOB=03-15-2017&request.titles[0]=Dr

断点在绑定后命中我的api方法。但是标题集合是空的,没有任何项目。但它不是空的。我错过了什么?

是的,我在Startup.cs中添加了以下代码来注册我的ModelBinderProvider。

services.AddMvc(config =>
{
    config.ModelBinderProviders.Insert(0, new RequestModelBinderProvider());
});

0 个答案:

没有答案