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