IIS覆盖ASP.NET中的自定义404错误页面

时间:2011-02-18 22:57:29

标签: c# asp.net iis-7 http-status-code-404

我正在尝试创建一个404错误页面,目前我已经拥有以下所有内容/尝试了以下所有内容来尝试完成此操作。当用户输入:

http://name/something.aspx

它的工作方式正如它应该的那样。但如果用户键入:

http://name/NotAFile

没有.aspx然后IIS7自己动手,我得到了IIS7附带的可爱错误页面。目标是网站仅重定向404状态代码(因此不是200或302重定向)。我在web配置中尝试过:

<customErrors mode="On" defaultRedirect="~/error/Default.aspx redirectMode="ResponseRewrite">
     <error statusCode="404" redirect="~/error/NotFound.aspx" />
</customErrors>

这适用于带有.aspx文件扩展名的网址,但不适用于没有扩展名的网址。与global.asax中的这种方法相同

void Application_Error(object sender, EventArgs e)
{
    var serverError = Server.GetLastError() as HttpException;

    if (serverError != null)
    {
        if (serverError.GetHttpCode() == 404)
        {
            Server.ClearError();
            Server.Transfer("~/error/NotFound.aspx");
        }

        Server.Transfer("~/error/Default.aspx");
    }
}

对此有相同的结果:(我最后的尝试是将此应用于网络配置:

<system.webServer>
    <httpErrors existingResponse="PassThrough" />
</system.webServer>

有了这个我只得到一个没有任何东西的纯白色屏幕...... 任何想法或意见将不胜感激!!提前谢谢!

4 个答案:

答案 0 :(得分:4)

以下代码适用于.aspx和其他文件类型:

Global.asax中

void Application_Error(object sender, EventArgs e)
{
    var serverError = Server.GetLastError() as HttpException;
    if (serverError != null)
    {
        if (serverError.GetHttpCode() == 404)
        {
            Server.ClearError();
            Response.Redirect("~/NotFound.aspx?URL=" + Request.Url.ToString());
        }
        Response.Redirect("~/Default.aspx");
    }
}

的Web.config

<system.webServer>
    <httpErrors existingResponse="PassThrough" />
</system.webServer>

答案 1 :(得分:3)

您的应用程序似乎在经典管道模式下运行。将其更改为集成,您的问题将得到解决。这是一篇关于管道模式及其差异的文章 - http://learn.iis.net/page.aspx/508/wildcard-script-mapping-and-iis-7-integrated-pipeline/

答案 2 :(得分:0)

对于经典的asp,你可以使用这个

<system.webServer>
    <httpErrors>
      <clear />
      <error statusCode="404" subStatusCode="-1" path="/404.html" responseMode="ExecuteURL" />
    </httpErrors>
  </system.webServer>

答案 3 :(得分:0)

<system.webServer >
    <httpErrors errorMode="Custom">
      <remove statusCode="404" subStatusCode="-1" />
       <error statusCode="404" path="http://www.seair.co.in/Page-not-found.aspx" responseMode="Redirect" />
    </httpErrors>
</system.webServer>

使用配置中的代码并提供错误页面的完整路径