1

我有一个 ASP.NET MVC 4 应用程序,我想将所有 HTTP 400 错误重定向到我的自定义错误页面。尽管 HTTP 400 错误没有像 404 错误那样处理,但我搜索了一个小时以找到解决方案。有许多解决方案展示了如何转义 400(错误请求错误),即允许在 url 中使用特殊字符。但我无法找到一些解决方案来捕获异常。

请帮助我以某种方式捕获所有 HTTP 错误请求并将它们重定向到我的错误页面。

4

2 回答 2

5

如果出现错误,切勿重定向用户,而是为失败的请求返回响应正文。我认为 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");
}
于 2013-03-08T20:21:34.113 回答
0

您可以做一些简单的事情,例如将其添加到您的 web.config

 <customErrors mode="RemoteOnly">
  <error statusCode="400" redirect="errorpage.html"/>
</customErrors>
于 2013-03-08T20:20:18.360 回答