asp.net mvc 3 и elmah.axd - еще один 404 - PullRequest
4 голосов
/ 01 марта 2011

Привет всем, кого я знаю, что это было опубликовано как предыдущий вопрос несколько раз, но я рассмотрел каждый вопрос и предложенные им решения, и я все еще не смог преодолеть мою проблему 404. Я использую Elmah 1.1 32-bit. Я ссылался на ASP.NET MVC - Elmah не работает и возвращает страницу 404 для elmah.axd , но мне не повезло после применения предложений.

Я использую ASP.NET MVC 3. Вот мой web.config:

...

<httpHandlers>
  <add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
</httpHandlers>
<httpModules>
  <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah"/>
  <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" />
  <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" />
</httpModules>

...

<errorLog type="Elmah.SqlErrorLog, Elmah"
    connectionStringName="dbconn" />

    <errorFilter>
        <test>
            <jscript>
                <expression>
                <![CDATA[
                // @assembly mscorlib
                // @assembly System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
                // @import System.IO
                // @import System.Web

                HttpStatusCode == 404
                || BaseException instanceof FileNotFoundException 
                || BaseException instanceof HttpRequestValidationException
                /* Using RegExp below (see http://msdn.microsoft.com/en-us/library/h6e2eb7w.aspx) */
                || Context.Request.UserAgent.match(/crawler/i)                      
                || Context.Request.ServerVariables['REMOTE_ADDR'] == '127.0.0.1' // IPv4 only
                ]]>
                </expression>
            </jscript>
        </test>
    </errorFilter>

Мои маршруты .axd игнорируются с помощью: routes.IgnoreRoute ( "{ресурс} .axd / {* PathInfo}");

Я запускаю сайт на IIS7, включен 32-битный режим. Я пробовал много разных вариантов конфигурации, но все безрезультатно. Есть идеи?

Спасибо Шаня

Ответы [ 5 ]

3 голосов
/ 18 мая 2011

Мой плохой. Мой .axd игнорировать правило маршрута было упорядочено после отображения маршрута по умолчанию. Правило сопоставления маршрута по умолчанию соответствует URL-адресу elmah.axd. Я предполагаю, что я не понимал, что правила игнорирования должны были быть перечислены выше этого маршрута. Спасибо всем за помощь!

    routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new
        {
            controller = "Home",
            action = "Index",
            id = UrlParameter.Optional
        } // Parameter defaults
    );

    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

Простое перемещение routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); до сопоставления маршрута по умолчанию решило эту проблему.

2 голосов
/ 09 мая 2011

Скопируйте .dll в свою корзину и ссылку ... добавьте значения по умолчанию для elmah в configSections

Не помещайте обработчик в system.webServer, как упомянуто выше, попробуйте вместо этого раздел system.webв вашем web.config.

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

просто оставьте ваш global.asax по умолчанию:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

перейдите к axd локально

, затем, если работает, заблокируйте егопокончить с разделом конфигурации Gedas, упомянутым выше.

1 голос
/ 06 июля 2012

Я получил ошибку 404 из-за того, что база данных SQLServer Compact превышала максимальный размер файла по умолчанию. Просто удалил файл данных SDF и 404 ушел.

1 голос
/ 07 марта 2011

Вы пробовали это?

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

также убедитесь, что местоположение elmah.axd защищено от обычных пользователей:

<location path="elmah.axd">
    <system.web>
        <authorization>
            <allow roles="Admin" />
            <deny users="*" />
        </authorization>
    </system.web>
</location>
0 голосов
/ 22 марта 2011

В файле asp.net mvc 3 global.asax.cs

    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        //filters.Add(new HandleErrorAttribute());
    } 

HandleErrorAttribute поглотит все исключения, не оставляя ELMAH ничего для обработки.

См. Блог Джо http://joel.net/wordpress/index.php/2011/02/logging-errors-with-elmah-in-asp-net-mvc3-part1/

...