如果我将Response.StatusCode设置为404,自定义错误页面将无法工作

时间:2014-03-15 21:02:52

标签: asp.net asp.net-mvc iis asp.net-mvc-5 custom-error-pages

在我的Asp.Net MVC网站上,我试图让自定义错误页面正常工作。在开发机器中,一切正常。但是当我将网站发布到制作时,它只有在我将状态代码设置为200(或者不设置它)时才有效。这是我的web.config

<customErrors mode="On" defaultRedirect="~/Error" redirectMode="ResponseRedirect">
  <error redirect="~/Error/NotFound" statusCode="404" />
</customErrors>

这是ErrorController

public class ErrorController : Controller
{
    public ViewResult Index()
    {
        return View("Error");
    }
    public ViewResult NotFound(string aspxerrorpath)
    {
        Response.StatusCode = 404; //if I comment out this line, it works
        return View("NotFound");
    }
}

如果我注释掉代码Response.StatusCode = 404;,则会显示错误页面。否则,它会显示网站上的默认404页面。同样,这适用于我的开发机器。我错过了什么吗?如何呈现自定义错误页面并同时返回404代码?

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,但如果您使用的是IIS 7或更高版本,则可以在web.config中使用httpErrors。:

<system.webServer>
    <httpErrors errorMode="Custom">
      <remove statusCode="404"/>
      <error statusCode="404" path="~/Error/NotFound" responseMode="ExecuteURL"/>
    </httpErrors>
</system.webServer>

在这里阅读更多相关信息: What is the difference between customErrors and httpErrors?