Как мне остановить IIS7 от выпуска своих собственных 404 до того, как мое приложение MVC получит возможность справиться с этим? - PullRequest
13 голосов
/ 13 апреля 2010

У меня есть приложение ASP.NET MVC 2, в котором есть обработчик события Application_Error в global.asax. В этом случае я обнаружил случай, когда типом исключения является HttpException, а HTTP-кодом - 404, и перенаправил на мою собственную страницу обработки 404.

Это прекрасно работает на моем сервере разработки Cassini, но сейчас я пытаюсь перенести его на свой рабочий сервер с IIS7 ( в интегрированном режиме ).

Когда я запрашиваю несуществующий URL, IIS7 показывает свою собственную страницу 404, и, насколько я могу судить, мой метод Application_Error никогда не вызывается.

Как мне это исправить?

Ответы [ 5 ]

6 голосов
/ 20 июля 2010

Я ответил, что в другом посте: Приложение ASP.NET, размещенное на IIS7, которое игнорирует пользовательские ошибки и возвращается к ошибкам IIS

"Чтобы отключить сообщения об ошибках IIS, необходимо установить

  Response.TrySkipIisCustomErrors = true;

на вашей странице ошибки. После этого ваши сообщения об ошибках должны отображаться без проблем. "

4 голосов
/ 16 июля 2010

Разве вы не можете просто отключить 404 httpError:

    <httpErrors errorMode="Custom">
        <remove statusCode="404" subStatusCode="-1" />
    </httpErrors>
0 голосов
/ 12 июля 2012

Ответ Флинна решил мою проблему ASP.NET, взяв под свой контроль 404

Теперь я могу сделать это:

Response.TrySkipIisCustomErrors = true;
Response.StatusCode = 404;
Response.Write("<script type='text/javascript'>setTimeout(function () { window.location = '/'; }, 1000)</script>");
HttpContext.Current.ApplicationInstance.CompleteRequest();
0 голосов
/ 19 июля 2010

Это обсуждается в обзорах MVC. Вероятно, это тот случай, когда ваш IIS 7 настроен в классическом режиме. Смотри:

Использование ASP.NET MVC с различными версиями IIS (C #)

0 голосов
/ 13 апреля 2010

В ASP.NET MVC я использую собственный ErrorController с методом Index (обработчик по умолчанию) и несколько пользовательских обработчиков (401, 404), используя следующие настройки web.config

<!--  CUSTOM ERROR MESSAGES
Set customErrors mode="On" or "RemoteOnly" to enable custom error messages, "Off" to disable. 
Add <error> tags for each of the errors you want to handle.   
"On" Always display custom (friendly) messages.
"Off" Always display detailed ASP.NET error information.
"RemoteOnly" Display custom (friendly) messages only to users not running 
on the local Web server. This setting is recommended for security purposes, so 
that you do not display application detail information to remote clients. -->
<customErrors mode="Off" defaultRedirect="~/Error">
    <error statusCode="401" redirect="~/Error/Unauthorized" />
    <error statusCode="404" redirect="~/Error/NotFound" />
</customErrors>

Я не использую Application_Error, кроме как для ведения журнала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...