让所有404在IIS6上运行

时间:2009-12-07 15:21:46

标签: asp.net iis-6 http-status-code-404

我已经遵循了如何通过以下方式设置404的建议:

http://www.andornot.com/about/developerblog/archive/2009_10_01_archive.aspx

及相关:

Best way to implement a 404 in ASP.NET

来自Global.asax:

protected void Application_Error(Object sender, EventArgs e)
{   
    Exception exception = Server.GetLastError();
    if (exception is HttpUnhandledException)
    {
        if (exception.InnerException == null)
        {
            Server.Transfer(string.Format("~/Error.aspx", false));
            return;
        }
        exception = exception.InnerException;
    }

    if (exception is HttpException)
    {
        if (((HttpException)exception).GetHttpCode() == 404)
        {
            Server.ClearError();
            Server.Transfer("~/404.aspx", false);
            return;
        }
    }

    if (Context != null && Context.IsCustomErrorEnabled)
    {
        Server.Transfer(string.Format("~/Error.aspx"), false);
    }

}

来自Web.config:

<customErrors mode="On"/>

在测试时(VS2010),它在本地运行得很漂亮,但在生产(ISS6)中它只适用于aspx页面。 http://mysite.se/foo.js让我看到ISS 404页面。 (“无法找到页面”)

我错过了什么?

2 个答案:

答案 0 :(得分:4)

如果您不想设置通配符映射,或者让ASP.NET处理所有静态文件(通常性能可能会说您没有),则需要配置IIS 6以将404发送到aspx处理错误的页面。

  1. 打开IIS管理器,浏览到相关网站,右键单击它,然后选择“属性”。
  2. 打开“自定义错误”标签。
  3. 向下滚动到404,选择它,然后按“编辑...”。
  4. 将邮件类型更改为URL并将其指向服务器上存在的文件 (即“/404.aspx”)。
  5. 第4点是关键 - 它需要指向一个存在的文件,否则IIS将恢复为默认值。

答案 1 :(得分:2)

Web.Config中指定的404处理程序仅处理由ASP.NET运行时处理的文件,其他所有包括JavaScript文件的处理程序将由IIS设置中指定的404页面处理。这就是为什么您看到http://mysite.se/foo.js的IIS生成错误消息而不是Web.Config的自定义错误部分中指定的错误消息的原因。

但是,您可以将这些文件类型映射到aspnet_isapi.dll,以便由自定义错误页面处理它们。

  1. 打开IIS管理器
  2. 选择您的网站
  3. 右键单击,在上下文菜单中 选择属性
  4. 在Extension列中找到 .aspx,双击并复制 aspnet_isapi.dll的完整路径。它 应该是这样的 C:\ WINDOWS \ Microsoft.NET \框架\ V1.1.4322 \« ASPNET_ISAPI.DLL
  5. 单击“添加”并将路径粘贴到“可执行文件”框中
  6. 在“扩展名”框中键入.html
  7. 确保检查该文件是否存在 未选中
  8. 关闭所有对话框
  9. 有关详细信息,请参阅here