asp.net mvc处理http 400错误

时间:2013-03-08 20:08:10

标签: asp.net-mvc asp.net-mvc-4 asp.net-mvc-routing http-status-code-400

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

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

2 个答案:

答案 0 :(得分:5)

永远不会在出现错误时重定向用户,而是返回失败请求的响应正文。我认为,IIS(和ASP.NET)重定向到错误页面的功能从根本上是错误的,不正确的,并且违反了HTTP规范(因为那时错误页面资源本身会返回错误,而不是原始请求如果它是一个Web浏览器,则用户无法重试,因为重新加载页面将再次返回错误页面,而不是重试原始的失败请求,这是他们想要的。)

总之...

您的应用程序代码必须生成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");
}

答案 1 :(得分:0)

您可以执行一些简单的操作,例如将此添加到您的web.config

 <customErrors mode="RemoteOnly">
  <error statusCode="400" redirect="errorpage.html"/>
</customErrors>