更改 ASP.NET MVC 请求验证响应

Change ASP.NET MVC request validation response

我喜欢 ASP.NET MVC 5 的请求验证功能。我想把它留在身边。但是,它总是会导致向客户端发送 return 内部错误 (500) 响应。这不太对;真正的问题是这是一个错误的请求!我想要 return 一个 Bad Request (400) 状态代码,并且可能是一个更好看的错误页面。

虽然我发现了很多关于禁用请求验证或实现您自己的自定义验证逻辑的有用信息,但在我所有的搜索中我还没有找到一种方法来自定义响应 验证失败后。

我该怎么做?可能吗?

编辑:我不是在谈论 模型 验证,我在谈论 request validation.

在我看来 ASP.NET return 错误请求 (400) 错误代码 内部 在请求中遇到任何可疑字符。例如,当 ASP.NET 尝试 select 基于请求路径的控制器/操作时,如果路径包含可疑字符,它将 return 400 错误代码。

所以当我的 none 代码甚至已经执行时,ASP.NET 会正确处理它。

内部服务器 (500) 错误代码仅在 我的代码 遇到可疑字符时发生。例如,当我写...

var queryStringKeys = Request.QueryString.AllKeys.ToArray();

...如果查询字符串包含可疑字符,QueryString 属性 将抛出 HttpRequestValidationException。不处理该异常会使 ASP.NET return 出现 500 错误(就像任何其他未处理的异常一样)。

因此,正确的处理方法是使用 try / catch 语句,并在 catch 块中,return 自己响应 Bad Request。我想您还可以设置某种过滤器,它也可以在全局范围内为您处理 HttpRequestValidationException