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

Я пытаюсь использовать elmah для своего приложения MVC, и я выполнил шаги в вики: 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}");
...

person zanona    schedule 22.01.2010    source источник
comment
Какую версию IIS вы используете? Я спрашиваю только потому, что, возможно, обработчик находится не в правильном разделе .config. В IIS7 он должен находиться в разделе ‹system.webServer› ‹handlers›. Может быть что-то совсем другое ...   -  person hunter    schedule 22.01.2010
comment
Спасибо, ребята, я использую IIS 7.5   -  person zanona    schedule 22.01.2010


Ответы (4)


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

person mxmissile    schedule 22.01.2010

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

person Alexander Beletsky    schedule 05.03.2011
comment
Это здорово (NuGet просто не вставил для меня правильную конфигурацию), но вы должны извлечь основные части кода и вставить их сюда, чтобы избежать гниения ссылок на SO. Спасибо за решение. - person Luke Puplett; 03.04.2014

Попробуйте добавить это в свой файл 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>
person hunter    schedule 22.01.2010
comment
Ошибка конфигурации Отсутствует обязательный атрибут "путь" - person zanona; 22.01.2010

Чтобы помочь другим испытать то, с чем столкнулась @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>       

Вышеупомянутое исправление устранило для меня ту же проблему «Ошибка конфигурации - Отсутствует обязательный атрибут 'path'», о которой впервые сообщила @zanona. Эта ошибка возникла из-за того, что теги в группе обработчиков должны быть структурированы, а его перегруппированные теги явно не имели атрибута path (потому что они не принадлежали ему, а принадлежали тегу модулей! ). Вот как должны выглядеть теги в разделе обработчиков:

<handlers>

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

</handlers>

Заметили, что там присутствует атрибут пути? Ах!

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

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

person ShieldOfSalvation    schedule 18.05.2017