我有一个模型如下
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调用这个方法时:
断点在绑定后命中我的api方法。但是标题集合是空的,没有任何项目。但它不是空的。我错过了什么?
是的,我在Startup.cs中添加了以下代码来注册我的ModelBinderProvider。
services.AddMvc(config =>
{
config.ModelBinderProviders.Insert(0, new RequestModelBinderProvider());
});