Обработка кода состояния IIS7 и HTTP - PullRequest
8 голосов
/ 29 апреля 2011

У меня сильная головная боль от попытки получить полный программный контроль над рендерингом ошибки в IIS7 (интегрированный режим).Я хочу получить сообщение об ошибке (страница не найдена, внутренняя ошибка сервера, не аутентифицирован и т. Д.), Перенести весь запрос в пользовательский ASPX или HTML (я предпочитаю последний) с правильным кодом статуса HTTP.

Что мне нужно, так это чтобы IIS7 не дал чушь о том, к чему я установил код состояния HTTP.Я не хочу его обработки ошибок.Когда я устанавливаю Response.StatusCode = (int)HttpStatusCode.NotFound, я хочу, чтобы IIS не отображал свою страницу с ошибкой, а, возможно, перенес запрос в другой файл.

Я получил работу статической конфигурации:

<configuration>
  <system.webServer>
    <httpErrors>
      <clear />
      <error statusCode="404" path="/errors/404.html" responseMode="ExecuteURL" />
    </httpErrors>
  </system.webServer>
</configuration>

Хотя это работает, это не дает мне программного контроля над тем, что делать с ответом, учитывая сценарий ошибки.Конфигурация - хороший запасной вариант, но я действительно хотел бы иметь возможность установить Response.StatusCode и визуализировать что-то совершенно отличное от настроенного 404.html в определенных обстоятельствах (например, ответ JSON, если мы получим Accept: application/json), но IIS7 выигралне позволяй мнеНет шансов.

Так какого черта я должен делать?Я пытался установить HttpResponse.TrySkipIisCustomErrors Property, но это похоже на огромный взлом и, похоже, не работает согласованно.Является ли для этого свойства значение true действительно рекомендуемой наилучшей практикой для получения желаемого поведения?

В настоящее время чувство, с которым я остаюсь, является не чем иным, как сильной ненавистью к IIS7.Может ли кто-нибудь помочь мне исправить это, доказав, что я просто глуп и могу действительно иметь полный контроль над стеком HTTP?

1 Ответ

8 голосов
/ 17 мая 2011

Обратите внимание на следующее: IIS7 переопределяет customErrors при установке Response.StatusCode? .

Вам нужно установить

  <system.webServer>
    <httpErrors existingResponse="PassThrough" />
  </system.webServer>
...