我正在.NET Core 1.1.0中创建一个自定义的ModelBinder,我想我已经把它弄清楚了。我只想在我特别想要的时候使用这个活页夹,但我无法弄清楚如何实现这一点。我希望在不调用它时忽略此模型绑定器,但是当我调用它时,我希望忽略所有其他。我怎么能做到这一点?
看似可行的两件事是参数属性[Bind]
和[ModelBinder]
,但这些都不起作用。
我首先尝试了以下内容:
[HttpGet]
public async Task<IActionResult> Get([Bind("test")] int userId)
{
// stuff
}
当我的自定义IModelBinderProvider
被点击时,ModelBinderProviderContext
包含BindingInfo
属性,而该属性又包含IPropertyFilterProvider
。调试时,该过滤器提供程序包含一个名为Include
的集合,其值为test
。似乎没有任何方法可以以编程方式检查 - 但是我无法找到实际访问该集合的方法。如果没有设置,它就为null,所以我可以假设检查为null,但这非常混乱并且不是一个好主意。
为了说明,这是ModelBinderProviderContext
的调试器信息:
接下来,我尝试使用此代码:
[HttpGet]
public async Task<IActionResult> Get(
[ModelBinder(BinderType = typeof(MyModelBinder))] int userId
)
{
// stuff
}
此属性似乎无效。它不会强制使用MyModelBinder
;模型绑定器按Startup.cs
中指定的顺序使用(MvcOptions
中的列表)。
答案 0 :(得分:0)
PropertyFilterProvider
包含实现IPropertyFilterProvider
接口的BindAttribute
实例。您可以将实例强制转换为BindAttribute
并访问Include
属性:
var bindAttribute = context.BindingInfo.PropertyFilterProvider as BindAttribute;
var include = bindAttribute?.Include;
请注意,演员表可能不会成功,导致bindingAttribute
成为null
。