Эта проблема была главной головной болью. Ни одно из ранее упомянутых предложений не решило его для меня, поэтому я включаю свое решение. Для записи, наша среда / платформа использует:
- .NET Framework 4
- MVC 3
- IIS8 (рабочая станция) и IIS7 (веб-сервер)
В частности, я пытался получить ответ HTTP 404, который перенаправил бы пользователя на нашу пользовательскую страницу 404 (через настройки Web.config).
Сначала мой код должен был выдать HttpException
. Возврат NotFoundResult
с контроллера не дал результатов, к которым я стремился.
throw new HttpException(404, "There is no class with that subject");
Затем мне пришлось настроить оба customErrors
и httpError
узлы в Web.config.
<customErrors mode="On" defaultRedirect="/classes/Error.aspx">
<error statusCode="404" redirect="/classes/404.html" />
</customErrors>
...
<httpErrors errorMode="Custom" existingResponse="Auto" defaultResponseMode="ExecuteURL">
<clear />
<error statusCode="404" path="/classes/404.aspx" responseMode="ExecuteURL" />
</httpErrors>
Обратите внимание, что я оставил existingResponse
как Auto
, что отличается от решения, предоставленного @sefl.
Настройки customErrors
оказались необходимыми для обработки моего явно выданного HttpException
, в то время как узел httpErrors
обрабатывал URL-адреса, которые выходили за пределы шаблонов маршрутов, указанных в Globals.asax.cs.
P.S. С этими настройками мне не нужно было устанавливать Response.TrySkipIisCustomErrors