Подтвердить что ты не робот

ASP.NET MVC - Elmah не работает и возвращает 404 страницы для elmah.axd

Я пытаюсь использовать 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}");
...
4b9b3361

Ответ 1

Вам также необходимо заполнить раздел конфигурации system.webServer для IIS 7+. См. этот вопрос.

Ответ 2

Здесь хороший способ использования ELMAH в MVC здесь, который не использует axd, а контроллер и пользовательский ElmahActionResult.

Ответ 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 выше), следующее изменение зафиксировало для меня сегодня ту же самую "Ошибка 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. Эта ошибка возникла в результате того, что теги в группе обработчиков, как ожидается, будут структурированы, а его переупорядоченные теги, очевидно, не имеют атрибута path (потому что они там не принадлежали, а скорее принадлежат к тегу модулей!). Теперь, какие теги в разделе обработчиков должны выглядеть так:

<handlers>

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

</handlers>

Обратите внимание, что атрибут path присутствует там? Ах!

Благодаря @hunter и @zanona, потому что они поставили меня на путь, который мне нужен, чтобы решить мою проблему.

(ПРИМЕЧАНИЕ. Я попытался отредактировать исходный пост из @hunter выше, чтобы внести исправления, но рецензирование было медленным, и я подумал, что буду держать этот ответ здесь, чтобы помочь кому-то, кто сталкивается с тем же вызовом в то же время. что редактирование принято, мы могли бы удалить этот пост.)