繁体   English   中英

在.NET Core中调用自定义ModelBinder

[英]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
}

当点击我的自定义IModelBinderProviderModelBinderProviderContext包含BindingInfo属性,该属性又包含IPropertyFilterProvider 调试时,该筛选器提供程序包含一个名为Include的集合,其中Include我的test值。 但是,似乎没有任何方法可以通过编程方式检查该集合,但是我找不到实际访问该集合的方法。 如果未设置任何内容,则为null,因此我可以假设检查是否为null,但这很混乱,也不是一个好主意。

为了说明这一点,这是ModelBinderProviderContext的调试器信息:

调试器输出

接下来,我尝试使用此代码:

[HttpGet]
public async Task<IActionResult> Get(
    [ModelBinder(BinderType = typeof(MyModelBinder))] int userId
)
{
    // stuff
}

此属性似乎没有任何作用。 它不会强制使用MyModelBinder 模型联编程序按照Startup.csMvcOptions的列表)中指定的顺序使用。

PropertyFilterProvider包含一个实现IPropertyFilterProvider接口的BindAttribute实例。 您可以将实例转换为BindAttribute并访问Include属性:

var bindAttribute = context.BindingInfo.PropertyFilterProvider as BindAttribute;
var include = bindAttribute?.Include;

请记住, bindingAttribute可能不会成功,导致bindingAttributenull

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM