【问题标题】:OnActionExecuting is not executing if reqest model is incorrect如果请求模型不正确,则 OnActionExecuting 不执行
【发布时间】:2020-05-18 20:27:24
【问题描述】:

当我使用正确的 Json 请求 {"Token": "string", "Minutes": 0} 从 Swagger 调用我的服务时,会调用 OnActionExecuting。但是,如果我在缺少参数{ "Token": "string", "Minutes": }Minutes 的缺失编号)的情况下提出请求,则OnActionExecuting 不存在。

更多背景信息:
Web API 项目AspNetCore project 2.2.0

将接收请求的控制器:

[HttpPost]
[ServiceFilter(typeof(ValidationAPIFilter))] 
[Route("ResetPendingTimeout")]
public IActionResult ResetTimeout([FromBody]ResetTimoutRequest resetTimoutRequest)

public class ValidationAPIFilter : ActionFilterAttribute {   
      public override void OnActionExecuting(ActionExecutingContext context) {} 

OnActionExecuting 用于验证传递给ResetTimeout(...) 操作的参数

public class ResetPendingTimoutRequest 
{
     public ResetPendingTimoutRequest();
     public string Token { get; set; }
     public long Minutes { get; set; }
}

招摇结果:

 {
  "Errors": {
    "Minutes": [
      "Unexpected character encountered while parsing value: }. Path 'Minutes', line 5, position 0.",
      "Unexpected character encountered while parsing value: }. Path 'Minutes', line 5, position 0."
    ]
  },
  "Title": "One or more validation errors occurred.",
  "Status": 400,
  "traceId": "80000049-0000-f900-b63f-84710c7967bb"
}

【问题讨论】:

  • 在这种情况下你的 API 方法会被调用吗?
  • @Rahul 不,根本没有被调用。
  • 您在 Swagger 中收到什么响应代码?
  • @AdamGreene 我刚刚用 Swagger 回复更新了我的原始问题。谢谢!

标签: c# asp.net-core asp.net-web-api


【解决方案1】:

因为在 ActionFilters 之前调用了 ModelBinding 中间件,并且当您的模型无效时,您的操作过滤器不会运行。

对于这种情况,您可以使用 MiddlewareFilter,因为 MiddlewareFilterModelBinding 之前运行,您可以检查 MiddlewareFilter 中的模型strong> 如果模型无效,则将0null 添加到Minutes

MiddlewareFilter 中您可以更改请求正文。

这个link 可能对你有帮助

【讨论】:

    【解决方案2】:

    我不确定这是一个有效的请求。我认为,如果您想通过您的请求实现“我不想要任何分钟属性”,则需要将“分钟”属性全部保留。通过这样做,我相信长数据类型的值将作为 0 出现。如果你让你的数据类型可以为空

    public long? Minutes
    

    如果您在请求中将分钟属性留空,它将作为空值通过。

    【讨论】:

      猜你喜欢
      • 2021-03-28
      • 1970-01-01
      • 1970-01-01
      • 2013-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-01
      • 2021-12-27
      相关资源
      最近更新 更多