我有一个 ASP.NET MVC 4 应用程序,我想将所有 HTTP 400 错误重定向到我的自定义错误页面。尽管 HTTP 400 错误没有像 404 错误那样处理,但我搜索了一个小时以找到解决方案。有许多解决方案展示了如何转义 400(错误请求错误),即允许在 url 中使用特殊字符。但我无法找到一些解决方案来捕获异常。
请帮助我以某种方式捕获所有 HTTP 错误请求并将它们重定向到我的错误页面。
我有一个 ASP.NET MVC 4 应用程序,我想将所有 HTTP 400 错误重定向到我的自定义错误页面。尽管 HTTP 400 错误没有像 404 错误那样处理,但我搜索了一个小时以找到解决方案。有许多解决方案展示了如何转义 400(错误请求错误),即允许在 url 中使用特殊字符。但我无法找到一些解决方案来捕获异常。
请帮助我以某种方式捕获所有 HTTP 错误请求并将它们重定向到我的错误页面。
如果出现错误,切勿重定向用户,而是为失败的请求返回响应正文。我认为 IIS(和 ASP.NET)重定向到错误页面的功能从根本上是错误的、不正确的,并且违反了 HTTP 规范(因为错误是为错误页面资源本身返回的,而不是原始请求.如果它是一个网络浏览器,用户无法重试,因为重新加载页面将再次返回错误页面,而不是重试他们最初失败的请求,这是他们想要的)。
反正...
HTTP 400 响应必须由您的应用程序代码生成,它不会自动完成。当通知非人工代理(即 Web 服务客户端,而不是 Web 浏览器)他们的 HTTP 请求缺少必需的值或具有格式错误的值时,通常会使用错误请求。
您可以在 MVC 中通过为所有控制器创建一个基本控制器类来执行此操作,如下所示:
public abstract class BaseController : Controller {
protected ActionResult Http400(String message) {
Response.StatusCode = 400;
return View(message); // you need to define a view file called "Http400.aspx" (or cshtml if you're using Razor) in your application's shared views folder
}
}
所以在你的应用程序逻辑中:
public ActionResult Foobar() {
if( IsBadRequest() ) return Http400("Bad request, try again");
}
您可以做一些简单的事情,例如将其添加到您的 web.config
<customErrors mode="RemoteOnly">
<error statusCode="400" redirect="errorpage.html"/>
</customErrors>