ASP.NET MVC - Elmah无法工作并返回elmah.axd的404页面

时间:2010-01-22 15:24:16

标签: asp.net-mvc http-status-code-404 elmah

我正在尝试将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}");
...

4 个答案:

答案 0 :(得分:13)

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

答案 1 :(得分:6)

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

答案 2 :(得分:2)

尝试将此添加到

中的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>

答案 3 :(得分:1)

为了帮助其他人体验@zanona在2010年遇到的问题(请参阅@ hunter上面的回复评论),以下更改为我今天修复了相同的“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的原始帖子进行更正,但同行评审很慢,我想我会在这里保留此回复,以帮助任何人同时面对同样的挑战。接受编辑,我们可以删除这篇文章。)