ASP.NET MVC - Elmah 不工作并为 elmah.axd 返回 404 页面

Posted

技术标签:

【中文标题】ASP.NET MVC - Elmah 不工作并为 elmah.axd 返回 404 页面【英文标题】:ASP.NET MVC - Elmah not working and returning 404 page for elmah.axd 【发布时间】:2011-01-08 06:17:53 【问题描述】:

我正在尝试将 elmah 用于我的 MVC 应用程序,并且我已按照 wiki 上的步骤操作:http://code.google.com/p/elmah/wiki/MVC,但即便如此尝试访问 myapp/elmah.axd 页面时:

404 - 找不到文件或目录。

有人可以帮帮我吗?

OBS:我的 IIS 版本是 7.5


如果有帮助,我将发布我的 web.config 的相关部分:

<sectionGroup name="elmah">
  <section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah" />
  <section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSectionHandler, Elmah" />
  <section name="errorMail" requirePermission="false" type="Elmah.ErrorMailSectionHandler, Elmah" />
  <section name="errorFilter" requirePermission="false" type="Elmah.ErrorFilterSectionHandler, Elmah" />
</sectionGroup>
...
</connectionStrings>
<elmah>
  <errorLog type="Elmah.XmlFileErrorLog, Elmah" logPath="~/App_Data" />
</elmah>
<system.web>
...
<httpHandlers>
  <remove verb="*" path="*.asmx" />
  <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
  <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
  <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false" />
  <add verb="*" path="*.mvc" validate="false" type="System.Web.Mvc.MvcHttpHandler, System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
  <add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
</httpHandlers>
<httpModules>
  <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
  <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
  <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />
  <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" />            
  <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" />
</httpModules>

在我的 Global.asax.cs 上

public static void RegisterRoutes(RouteCollection routes)
   
  routes.IgnoreRoute("resource.axd/*pathInfo");
...

【问题讨论】:

您使用的是什么版本的 IIS?我只是问,因为也许处理程序不在正确的 .config 部分。在 IIS7 中,它需要位于 部分。可能完全是别的东西...... 谢谢大家,我使用的是 IIS 7.5 【参考方案1】:

对于 IIS 7+,您还需要填充 system.webServer 配置部分。 See this question.

【讨论】:

【参考方案2】:

这是在 MVC here 中使用 ELMAH 的好方法,它不使用 axd,而是使用控制器和自定义 ElmahActionResult

【讨论】:

这很好(NuGet 只是没有为我输入正确的配置),但是您应该取出主要代码部分并将它们粘贴到此处以避免链接损坏。感谢您的解决方案。【参考方案3】:

尝试将此添加到您的 web.config 文件中的

<system.webServer>

    <handlers>
        <remove name="ErrorLog" />
        <remove name="ErrorMail" />
        <remove name="ErrorFilter" />
        <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />
        <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" />            
        <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" />     
    </handlers>       
</system.webServer>

【讨论】:

配置错误缺少必需的属性“路径”【参考方案4】:

为了帮助其他人体验 @zanona 在 2010 年遇到的问题(请参阅上面对 @hunter 的回复的 cmets),以下更改今天为我修复了相同的“HTTP 错误 500.19 - 内部服务器错误”。请注意@hunter 回复中配置标签的位置是导致@zanona 错误的原因。 @hunter 提到的那些标签属于模块标题,而不是处理程序!

<modules>
  <remove name="ErrorLog" />
  <remove name="ErrorMail" />
  <remove name="ErrorFilter" />
  <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />
  <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" />            
  <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" /> 
 </modules>       

上述修复为我消除了 @zanona 首次报告的完全相同的“配置错误 - 缺少必需的属性‘路径’”问题。该错误是由于处理程序组中的标签的结构方式导致的,而他重新排列的标签显然没有路径属性(因为它们不属于那里,而是属于模块标签下! )。现在,处理程序部分中的标签应如下所示:

<handlers>

  <add name="elmah" verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />

</handlers>

注意到那里存在路径属性吗?啊!

感谢@hunter 和@zanona,因为他们确实让我走上了解决问题所需的道路。

(注意:我已尝试编辑上面@hunter 的原始帖子以进行更正,但同行评审速度很慢,我想我会在此处保留此回复以帮助同时面临相同挑战的任何人。当该编辑已被接受,我们可以删除此帖子。)

【讨论】:

以上是关于ASP.NET MVC - Elmah 不工作并为 elmah.axd 返回 404 页面的主要内容,如果未能解决你的问题,请参考以下文章

在 Apache 上运行 ASP.net MVC 时无法访问 elmah.axd

asp.net mvc:是啥让 error.cshtml 运行(并且在此过程中不登录到 elmah)

Elmah 和 ASP.NET MVC 3

为啥会收到奇怪的错误消息 asp.net mvc "elmah.mvc logging library"?

未记录 ELMAH 和 ASP.NET MVC 自定义错误

无法让 ELMAH 在 IIS7.5 上与 ASP.NET MVC2 一起使用