httpErrors errorMode = "Подробно" только для определенного кода ошибки - PullRequest
3 голосов
/ 24 сентября 2011

У меня есть приложение asp.net MVC3.В моем контроллере у меня есть действие ajax, которое устанавливает пользовательский код ответа, используя Response.StatusCode = 600. Мне нужно пройти через ответ как есть, без IIS, пытающегося найти пользовательскую страницу ошибки.Я попытался использовать следующий код, чтобы IIS не использовал свою пользовательскую страницу для статуса ответа 600.

<!-- Pass through Ajax Errors with status code 600 -->
  <httpErrors errorMode="Detailed" existingResponse="PassThrough">
      <error statusCode="600" path="/" />
  </httpErrors>
<!--End -->

Проблема с приведенным выше фрагментом состоит в том, что это относится ко всем кодам ответов, так что даже если кодСбой 500 Internal Server, ответ проходит как есть, без вмешательства IIS.Это выставляет мой внутренний контроллер и код просмотра пользователю (если случайно возникает какое-то исключение, которое я не обработал).

Итак, как мне настроить web.config для прохождения подробного ответа только тогда, когда response.statuscode равен 600 (настраиваемый), и предоставить настраиваемые страницы IIS по умолчанию для других ошибок (например, Внутренняя ошибка сервера 500).

Ответы [ 2 ]

4 голосов
/ 04 июля 2013

Если вы работаете в режиме интегрированного конвейера, вы можете попробовать установить для свойства TrySkipIisCustomErrors значение true:

Response.StatusCode = 600;
Response.TrySkipIisCustomErrors = true;

При этом HTTP specification четко определяет, что HTTP-код ответа не превосходит 5xx. Так что установка Response.StatusCode = 600; кажется здесь довольно необычной. Что именно вы пытаетесь достичь и почему стандартные коды ответов HTTP, определенные в спецификации, не могут охватить ваш сценарий?

0 голосов
/ 28 декабря 2011

В файле web.config я настроил раздел пользовательских ошибок следующим образом:

<customErrors mode="On">
  <error statusCode="404" redirect="~/Home/NotFound"></error>
</customErrors>

А затем в контроллерах я все еще устанавливаю атрибут [HandleError] над моим контроллером. Все необработанные исключения переходят на обычную страницу ошибок в общем доступе. Любые ошибки 404 переходят на страницу NotFound.

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