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

Posted

技术标签:

【中文标题】更改 ASP.NET MVC 请求验证响应【英文标题】:Change ASP.NET MVC request validation response 【发布时间】:2020-06-06 01:29:56 【问题描述】:

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

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

我该怎么做?有可能吗?

编辑:我不是在谈论 model 验证,我是在谈论 request validation。

【问题讨论】:

你在说ModelState.IsValid吗? @nurdyguy 查看编辑 【参考方案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

【讨论】:

以上是关于更改 ASP.NET MVC 请求验证响应的主要内容,如果未能解决你的问题,请参考以下文章

如何使用集成身份验证在 asp net mvc 中强制重新身份验证

Asp.net MVC Vue Axios无刷新请求数据和响应数据

如何更改 ASP.NET MVC 中 int 模型验证的 ErrorMessage?

如何继续等待 API 请求响应值完成 ASP .Net Core MVC

ASP.NET MVC 处理区域中的请求验证异常

处理 OAuth 2.0 身份验证 - 在 ASP.NET MVC 应用程序中获取令牌重定向令牌响应