Как я могу получить пользовательскую страницу ошибок для trace.axd в MVC3?

Мое приложение MVC3 отображает настраиваемые страницы ошибок для кодов состояния 403, 404 и 500, но при просмотре файла trace.axd отображается следующий YSOD:

    Server Error in '/' Application.

    Trace Error

    Description: Trace.axd is not enabled in the configuration file for this application. Note: Trace is never enabled when <deployment retail=true /> 

    Details: To enable trace.axd, please create a <trace> tag within the configuration file located in the root directory of the current web application. This <trace> tag should then have its "enabled" attribute set to "true".

    <configuration>
         <system.web>
            <trace enabled="true"/>
        </system.web>
    </configuration>

Итак, у меня отключена трассировка, и это хорошо, но почему страница 500 не отображается, поскольку с сервера возвращается ошибка 403? Я был бы достаточно счастлив с 404, 403 или 500 на самом деле - до тех пор, пока это не уродливый желтый экран!

Редактировать: я получал 500 вместе с YSOD при работе на локальном хосте, но на самом деле это 403 на сервере, что ближе к тому, что я ожидал, но по-прежнему нет пользовательской страницы ошибок. Это также немного другая стандартная страница ошибок на сервере:

Server Error in '/' Application.

Trace Error

Description: The current trace settings prevent trace.axd from being viewed remotely (for security reasons). It could, however, be viewed by browsers running on the local server machine. 

Details: To enable trace.axd to be viewable on remote machines, please create a <trace> tag within the configuration file located in the root directory of the current web application. This <trace> tag should then have its "localOnly" attribute set to "false".

<configuration>
    <system.web>
        <trace localOnly="false"/>
    </system.web>
</configuration>

person Cosmologinaut    schedule 30.07.2012    source источник


Ответы (2)


Удаление IgnoreRoute, предложенное @Cosmologinaut, не сработало для меня и, как он говорит, кажется неправильным. Я нашел лучшее решение, которое заключается в удалении обработчика трассировки HTTP в файле Web.config:

  <system.webServer>
    <!-- remove TraceHandler-Integrated - Remove the tracing handlers so that navigating to /trace.axd gives us a 
         404 Not Found instead of 500 Internal Server Error. -->
    <handlers>
      <remove name="TraceHandler-Integrated" />
      <remove name="TraceHandler-Integrated-4.0" />
    </handlers>
  </system.webServer>

Переход к /trace.axd теперь дает нам 404 Not Found вместо 500 Internal Server Error.

person Muhammad Rehan Saeed    schedule 04.03.2015

Поскольку ответов не было, я спросил @shanselman в Твиттере, который предположил, что <deployment retail = "true" /> может решить эту проблему, но он все равно вернул тот же YSOD.

В конце концов я решил это, удалив route.IgnoreRoute("{resource}.axd/{*pathInfo}"); из конфига маршрутизации. Выглядит не совсем правильно, но работает.

person Cosmologinaut    schedule 22.08.2013