Как я могу получить пользовательскую страницу ошибки для 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 при работе на localhost, но на самом деле это 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>

2 ответа

Решение

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

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

Удаление 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.

Другие вопросы по тегам