从动作过滤器更改参数的模型绑定器

时间:2018-06-04 21:26:42

标签: asp.net-core model-binding custom-action-filter

ASP.NET Core 2.x. 是否可以从为请求运行的操作过滤器更改参数的模型绑定器? 例如:

[HttpPost("{id}")]
[TypeFilter(typeof(MyResourceFilter))]
public async Task<IActionResult> Foo([FromRoute(Name="id")] Bar, [FromBody] Baz baz)

MyResourceFilter IAsyncResourceFilter实现会查看绑定源为BarBindingSource.Path的{​​{1}}类型的任何参数,并执行以下操作:

  • 尝试使用参数的活页夹模型名称的值从数据源获取BindingSource.Query的实例(例如,在这种情况下为Bar的值)
  • 如果没有提供的ID 的值,
  • 将返回404响应
  • 如果找到该值:
    • 将其缓存在稍后由模型绑定器
    • 使用的请求中
    • 通过将id设置为BindingInfo并将BindingSource设置为BindingSource.Custom(其BinderType实施使用缓存来修改此参数的MyResourceFilter来自资源过滤器实现的值)

尽管为参数的BindingInfo设置了BindingSource和BinderType,但是不会调用自定义模型绑定代码。我可以通过在参数声明之前添加IModelBinder来调用它,但我不愿意这样做,因为为了便于使用,我只想指定一次类型。

我可以进入为什么我按照自己的方式做事的原因,但我更愿意简单地知道这是否可行。

0 个答案:

没有答案