【问题标题】:IIS overriding custom 404 error page in ASP.NETIIS 覆盖 ASP.NET 中的自定义 404 错误页面
【发布时间】:2011-06-30 03:59:58
【问题描述】:

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

http://name/something.aspx

它按预期工作。但是如果用户输入:

http://name/NotAFile

如果没有 .aspx,那么 IIS7 会自行处理问题,我会看到 IIS7 附带的可爱错误页面。目标是该站点仅使用 404 状态代码进行重定向(因此不是 200 或 302 重定向)。我在这两种网络配置中都尝试过:

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

这适用于带有 .aspx 文件扩展名的 url,但不适用于没有扩展名的 URL。与 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>

有了这个,我只会得到一个纯白的屏幕,上面什么都没有...... 任何想法或 cmets 将不胜感激!提前致谢!

【问题讨论】:

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


    【解决方案1】:

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

    全球.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>
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我在 IIS 7.0 中遇到了同样的问题,我正在使用集成模式!
      • @Xaqron 将属性 runAllManagedModulesForAllRequests="true" 添加到 configuration/system.webServer/modules
      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:
        <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>
        

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-10-07
          • 2016-04-25
          • 2013-09-16
          • 2017-02-16
          • 2011-11-08
          • 1970-01-01
          • 1970-01-01
          • 2015-03-18
          相关资源
          最近更新 更多