【问题标题】:HttpHandler for 404 error stopped working after 4.0 upgrade4.0 升级后 404 错误的 HttpHandler 停止工作
【发布时间】:2011-02-15 15:01:23
【问题描述】:

我有一个处理 404 错误的 HttpHandler,这是我多年前实施的一种 url 路由方式。如果请求映射到有效页面,它会重定向到该页面。否则,它会返回 404。(我知道我应该开始使用 asp.net 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 和其他地方。

我想一定有一些我错过的配置设置或类似的东西。当然,这只是我的生产服务器上的问题,所以我无法在调试器中运行它来查看发生了什么。如果没有什么简单的事情发生,我会在我的系统中插入一些额外的日志来帮助追踪它。

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

【问题讨论】:

  • 不仅你没有接受任何问题,你甚至没有投票其他问题...... - 保持你的投票安全。
  • 我已经问了 5 个问题(包括这个)。只有一个人得到了回答,我把它归功于。我刚刚检查了那个问题,由于某种原因,标记的答案不见了。
  • 你只投票了 42 次,声望 7k !!!

标签: asp.net iis-6 asp.net-4.0


【解决方案1】:

你可能会检查它是否是动词属性,也许它应该是 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 自定义错误页面。

【讨论】:

    【解决方案2】:

    从默认应用程序池更改为经典应用程序池为我修复了它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-14
      • 2019-08-11
      • 2021-07-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多