2011-02-15 98 views
0

我有一个HttpHandler,它负责处理404错误,这是我多年前实现的一种URL路由方式。如果请求映射到有效页面,它将重定向到该页面。 (我知道我应该开始使用asp.net 4.0的新路由功能,但这需要一些时间,我需要尽快完成)HttpHandler 404错误在4.0升级后停止工作

在IIS6中,我映射了将404错误改为“/404.ashx”。在web.config中,自定义错误设置像这样:

<customErrors mode="On" defaultRedirect="error.aspx"> 
    <error statusCode="404" redirect="/404.ashx"/> 
</customErrors> 

和HTTP处理程序:

<httpHandlers> 
    <add verb="GET" path="404.ashx" type="myNamespace.PageNotFoundHandler,myAssemblyName"/> 
</httpHandlers> 

这已经工作了多年 - 它一旦停止工作,因为我改变了网站使用asp.net 4.0。一切都重新编译为4.0,并且没有代码更改。

现在,当我点击其中一个曾经工作过的网址时,我得到一个带有404错误代码的空白页面。如果我删除IIS 404错误映射,我会得到一个普通的旧404页面。似乎这个httphandler没有被调用。

我有其他http处理程序工作正常。

我已将注册表中的EnableExtensionlessUrls项目设置为0,如建议here和其他地方。

我想必须有一些配置设置我错过了或类似的东西。当然,这只是我的生产服务器上的一个问题,所以我不能在调试器中运行它来查看发生了什么。如果不容易出现,我会在我的系统中插入一些额外的日志记录以帮助追踪它。

关于我还能检查什么的任何想法?

+0

不仅你没有接受任何问题,你甚至没有投其他问题... - 保持你的票保险。 – Aristos 2011-02-15 16:05:55

回答

1

您可能会检查它是否是Verb属性,也许它应该是POST或*?

另一个快速解决方案是将代码添加到您的全局类中的Application_Error事件处理程序中,如下所示。

for (Ex = Server.GetLastError(); Ex != null; Ex = Ex.InnerException) 
{ 
    if (Ex is HttpException && ((HttpException)Ex).GetHttpCode() == 404 && Context != null) 
    { 
     Context.Server.Transfer("~/404.ashx"); 
     return; 
    } 
} 

这将消除您的web配置内部的任何配置设置的需要,但它的行为可能比你目前使用的有所不同,因为它会采取对当前请求的网页/文件的页标识,而不是在处理正常的IIS 404自定义错误页面时在查询字符串中传递路径。

1

从默认的应用程序池更改为经典的固定为我。

相关问题