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

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

Ответы [ 4 ]

13 голосов
/ 22 января 2010

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

6 голосов
/ 05 марта 2011

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

2 голосов
/ 22 января 2010

Попробуйте добавить это в свой файл 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>
1 голос
/ 18 мая 2017

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

<handlers>

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

</handlers>

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

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

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

...