【问题标题】:Change ASP.NET MVC request validation response更改 ASP.NET MVC 请求验证响应
【发布时间】:2020-06-06 01:29:56
【问题描述】:
我喜欢 ASP.NET MVC 5 的请求验证功能。我想保留它。但是,它总是会导致将内部错误 (500) 响应返回给客户端。这不太对;真正的问题是这是一个糟糕的请求!我想返回一个错误请求 (400) 状态代码,并可能返回一个更好看的错误页面。
虽然我找到了很多关于禁用请求验证或实现自己的自定义验证逻辑的有用信息,但在我的所有搜索中,我还没有找到一种方法来在失败后自定义响应验证。
我该怎么做?有可能吗?
编辑:我不是在谈论 model 验证,我是在谈论 request validation。
【问题讨论】:
标签:
asp.net-mvc
asp.net-mvc-5
request-validation
【解决方案1】:
在我看来,如果 ASP.NET 在内部在请求中遇到任何可疑字符,它会返回错误请求 (400) 错误代码。例如,当 ASP.NET 尝试根据请求路径选择控制器/动作时,如果路径中包含可疑字符,则会返回 400 错误代码。
所以当我的代码甚至还没有执行时,ASP.NET 会正确处理它。
内部服务器 (500) 错误代码仅在 我的代码 遇到可疑字符时发生。例如,当我写...
var queryStringKeys = Request.QueryString.AllKeys.ToArray();
...如果查询字符串包含可疑字符,QueryString 属性将抛出 HttpRequestValidationException。不处理该异常会使 ASP.NET 返回 500 错误(就像任何其他未处理的异常一样)。
所以正确的处理方式是使用try/catch语句,在catch块中,自己返回一个Bad Request响应。我想您还可以设置某种过滤器,该过滤器还可以在全球范围内为您处理HttpRequestValidationException。