ASP.NET核心控制器有用的错误消息返回

时间:2017-03-24 13:48:29

标签: c# asp.net controller asp.net-core

我的应用程序是ASP.NET Core 1.0 Web API。

[HttpGet("{someData:MinLength(5):MaxLength(5)}")]
[Produces("application/json")]
public async Task<IActionResult> GetSomeData(string someData)
{
    return this.Ok(JsonConvert.SerializeObject("Data is: " + someData));
}

因此,当我使用length 6传递参数时,控制器会返回Response Code 404Response body no content,因为参数没有length 5

这些信息对我来说没用,是否有办法返回更有用的错误信息?

我知道我可以在每个控制器中硬编码错误信息:

[HttpGet("{someData}")]
[Produces("application/json")]
public async Task<IActionResult> GetSomeData(string someData)
{
      if (someData.Length != 5)
      {
          return this.StatusCode(404, JsonConvert.SerializeObject("The data has to be 5 digits long."));
      }
    return this.Ok(JsonConvert.SerializeObject("Data is: " + someData));
}

问题是,我的应用程序中有很多控制器,我不想每次都验证参数。

控制器是否有办法自行返回更有用的Responsebody?或者我是否真的必须在每个控制器中添加验证方法并忘记[HttpGet]参数及其错误返回?

非常感谢

2 个答案:

答案 0 :(得分:1)

路由约束用于限制哪些请求的路径进入给定的操作/路由目标。它们并不意味着执行模型验证 - 以后通过单独的机制完成。如果请求不符合您的路线限制,则它根本不会匹配该路线。如果它不匹配任何路线,您将获得404.

正如您在自己的回答中所述,路线文档中涵盖了这一点:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/routing#route-template-reference

答案 1 :(得分:0)

好吧,我找到了答案:

无法获得更好的错误消息。

  

警告

     

避免使用约束进行输入验证,因为这样做意味着   无效输入将导致404(未找到)而不是400   带有适当的错误消息。应该使用路径约束   消除类似路线之间的歧义,而不是验证a的输入   特别的路线。

找到here