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

Asp.net mvc 更改ASP.NET MVC请求验证响应,asp.net-mvc,asp.net-mvc-5,request-validation,Asp.net Mvc,Asp.net Mvc 5,Request Validation,我喜欢ASP.NETMVC5的请求验证功能。我想留着它。但是,它总是导致将内部错误(500)响应返回给客户端。那不太对;真正的问题是这是一个错误的请求!我想返回一个错误的请求(400)状态代码,并可能返回一个外观更好的错误页面 虽然我已经找到了大量关于禁用请求验证或实现您自己的自定义验证逻辑的有用信息,但在我所有的搜索中,我还没有找到一种在验证失败后自定义响应的方法 我该怎么做?可能吗 编辑:我不是说模型验证,我是说。在我看来,如果ASP.NET在内部遇到请求中的任何可疑字符,它确实会返回错误请

我喜欢ASP.NETMVC5的请求验证功能。我想留着它。但是,它总是导致将内部错误(500)响应返回给客户端。那不太对;真正的问题是这是一个错误的请求!我想返回一个错误的请求(400)状态代码,并可能返回一个外观更好的错误页面

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

我该怎么做?可能吗


编辑:我不是说模型验证,我是说。

在我看来,如果ASP.NET在内部遇到请求中的任何可疑字符,它确实会返回错误请求(400)错误代码。例如,当ASP.NET尝试根据请求路径选择控制器/操作时,如果路径包含可疑字符,它将返回400错误代码

因此,当我的代码还没有执行时,ASP.NET会正确地处理它

只有当我的代码遇到可疑字符时,才会出现内部服务器(500)错误代码。例如,当我写

var queryStringKeys=Request.QueryString.AllKeys.ToArray();
…如果查询字符串包含可疑字符,则那里的
QueryString
属性将抛出一个
HttpRequestValidationException
。不处理该异常会使ASP.NET返回500错误(与任何其他未处理的异常一样)


因此正确的处理方法是使用try/catch语句,并在catch块中自己返回错误的请求-响应。我想您还可以设置某种过滤器,该过滤器还可以为您全局处理
HttpRequestValidationException

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

因此,当我的代码还没有执行时,ASP.NET会正确地处理它

只有当我的代码遇到可疑字符时,才会出现内部服务器(500)错误代码。例如,当我写

var queryStringKeys=Request.QueryString.AllKeys.ToArray();
…如果查询字符串包含可疑字符,则那里的
QueryString
属性将抛出一个
HttpRequestValidationException
。不处理该异常会使ASP.NET返回500错误(与任何其他未处理的异常一样)


因此正确的处理方法是使用try/catch语句,并在catch块中自己返回错误的请求-响应。我想你也可以设置某种过滤器,它也可以为你全局处理
HttpRequestValidationException

你说的是
ModelState.IsValid
?@nurdyguy See edit你说的是
ModelState.IsValid
?@nurdyguy See edit吗