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