У меня сильная головная боль от попытки получить полный программный контроль над рендерингом ошибки в 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?