[英]Call custom ModelBinder in .NET Core
我正在.NET Core 1.1.0中创建一个自定义ModelBinder,我想我基本上已经知道了。 我只想在需要时才使用此资料夹,但是我不知道该如何完成。 我不希望调用此模型绑定程序时将其忽略,但是当我调用它时,我希望所有其他绑定程序都被忽略。 我该怎么做?
似乎可行的两件事是参数属性[Bind]
和[ModelBinder]
,但它们都[ModelBinder]
。
我首先尝试了以下方法:
[HttpGet]
public async Task<IActionResult> Get([Bind("test")] int userId)
{
// stuff
}
当点击我的自定义IModelBinderProvider
, ModelBinderProviderContext
包含BindingInfo
属性,该属性又包含IPropertyFilterProvider
。 调试时,该筛选器提供程序包含一个名为Include
的集合,其中Include
我的test
值。 但是,似乎没有任何方法可以通过编程方式检查该集合,但是我找不到实际访问该集合的方法。 如果未设置任何内容,则为null,因此我可以假设检查是否为null,但这很混乱,也不是一个好主意。
为了说明这一点,这是ModelBinderProviderContext
的调试器信息:
接下来,我尝试使用此代码:
[HttpGet]
public async Task<IActionResult> Get(
[ModelBinder(BinderType = typeof(MyModelBinder))] int userId
)
{
// stuff
}
此属性似乎没有任何作用。 它不会强制使用MyModelBinder
; 模型联编程序按照Startup.cs
( MvcOptions
的列表)中指定的顺序使用。
PropertyFilterProvider
包含一个实现IPropertyFilterProvider
接口的BindAttribute
实例。 您可以将实例转换为BindAttribute
并访问Include
属性:
var bindAttribute = context.BindingInfo.PropertyFilterProvider as BindAttribute;
var include = bindAttribute?.Include;
请记住, bindingAttribute
可能不会成功,导致bindingAttribute
为null
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.