Мне нужна отдельная страница ошибок для обработки всех ошибок http. При возникновении ошибки http на странице должна отображаться пользовательская страница, а ее содержимое должно генерироваться динамически на основе кода состояния ошибки http.
Мне наполовину удалось показать пользовательский HTML, когда возникает конкретная ошибка http. Например 404. Но есть две проблемы.
1. Мне нужно перенаправить на .cshtml, чтобы я мог выполнить некоторую обработку ответа и создать содержимое в соответствии с кодом состояния ошибки http.
2. Мне нужен метод для перенаправления всех ошибок в этот файл .cshtml.
Я читал документы и искал похожие вопросы в SO, следил за ними и без прогресса.
В настоящее время у меня есть следующие строки в web.config
:
<httpErrors errorMode="Custom" defaultResponseMode="File" defaultPath="CustomError.htm">
<clear />
<error path="CustomError.htm" responseMode="File" statusCode="403"/>
</httpErrors>
Это покажет содержимое файла CustomError.htm
, который находится по тому же пути к файлу web.config
.
Но, читая документы, я ожидал, что этот конфиг будет работать:
<httpErrors errorMode="Custom" defaultResponseMode="File" defaultPath="CustomError.htm">
<clear />
</httpErrors>
Но он не показывает содержимое файла CustomError.htm, вместо этого он показывает пустую страницу со следующим предложением:
You do not have permission to view this directory or page.
Кроме того, даже для обработки одного httpError у меня возникают проблемы с использованием .cshtml, и мне пришлось использовать HTML-файл.
На самом деле у меня есть следующий файл cshtml: Views/Error/PageNotFound.cshtml
У него есть контроллер и метод actionResult, который называется: PageNotFound
Теперь, когда я сделаю это:
<httpErrors errorMode="Custom" defaultResponseMode="File" defaultPath="CustomError.htm">
<clear />
<error path="~/Error/PageNotFound" responseMode="ExecuteURL" statusCode="404"/>
</httpErrors>
Затем браузер выдает не найденную ошибку.
Когда я изменяю responseMode
на Redirect
, путь снова и снова добавляется к существующему URL и не будет работать.
Как вы можете видеть в тегах, я использую asp.net mvc и IIS 10 на Windows 10.
Так какая помощь?