我已经遵循了如何通过以下方式设置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页面。 (“无法找到页面”)
我错过了什么?
答案 0 :(得分:4)
如果您不想设置通配符映射,或者让ASP.NET处理所有静态文件(通常性能可能会说您没有),则需要配置IIS 6以将404发送到aspx处理错误的页面。
第4点是关键 - 它需要指向一个存在的文件,否则IIS将恢复为默认值。
答案 1 :(得分:2)
Web.Config
中指定的404处理程序仅处理由ASP.NET运行时处理的文件,其他所有包括JavaScript文件的处理程序将由IIS设置中指定的404页面处理。这就是为什么您看到http://mysite.se/foo.js
的IIS生成错误消息而不是Web.Config
的自定义错误部分中指定的错误消息的原因。
但是,您可以将这些文件类型映射到aspnet_isapi.dll,以便由自定义错误页面处理它们。
有关详细信息,请参阅here。