Как показать динамическую пользовательскую страницу ошибок для всех ошибок http? - PullRequest
0 голосов
/ 02 июня 2019

Мне нужна отдельная страница ошибок для обработки всех ошибок 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. Так какая помощь?

Ответы [ 2 ]

0 голосов
/ 03 июня 2019

@ arm, перейдите по ссылкам ниже

https://www.codeproject.com/Articles/850062/Exception-handling-in-ASP-NET-MVC-methods-explaine

Надеюсь, метод Override «OnException» может помочь вам разобраться в ваших проблемах.

0 голосов
/ 02 июня 2019

Я не уверен на 100%, что правильно вас недооценил, но попробуйте этот код, используйте его для моих пользовательских ошибок, и я на 100% уверен, что он работает

<customErrors mode="Off" defaultRedirect="/Error/Default">
  <error statusCode="404" redirect="/Error/E404" />
  <error statusCode="500" redirect="/Error/E500" />
  <error statusCode="403" redirect="/Error/E403" />
</customErrors>

вы можете добавить больше кодов состояния, когда вы идете на

...