Глобальная обработка исключений (IExceptionHandler): показать страницу ошибки без перенаправленияC#

Место общения программистов C#
Ответить
Anonymous
 Глобальная обработка исключений (IExceptionHandler): показать страницу ошибки без перенаправления

Сообщение Anonymous »

Я использую новый IExceptionHandler для GlobalExceptionHandling, представленный в ASP.NET Core 8, в приложении MVC.
Я видел много примеров, когда TryHandleAsync записывает ответ JSON, но я m в среде MVC и хотите вернуть HTML-страницу. У меня есть действие «Ошибка» в моем HomeController, которое показывает моим пользователям общую страницу ошибки (например, «Пожалуйста, свяжитесь с XXX, если проблема не исчезнет...»).
Я мог бы просто выполнить следующее:

Код: Выделить всё

internal sealed class GlobalExceptionHandler : IExceptionHandler
{

private readonly ILogger _logger;

public GlobalExceptionHandler(ILogger logger)
{
_logger = logger;
}

public async ValueTask TryHandleAsync(HttpContext httpContext, Exception exception, CancellationToken cancellationToken)
{
/* Doing some logic here depending on the exception type */
var message = ....;

/* Logging the exception */
_logger.LogError(exception, message);

httpContext.Response.Redirect("/Home/Error");

return true;
}

}
Но моя проблема в том, что я не хочу использовать перенаправление, поскольку пользователь увидит «/Home/Error» в своем браузере, и если он нажмет F5, он застрять на этой странице. Я думал, что было бы просто напрямую вызвать результат просмотра действия Error, но это не кажется таким простым.
Я пытался вызвать движок Razor, чтобы получить html моего представления ошибок, аналогично тому, что показано здесь: https://weblog.west-wind.com/posts/2022 ... to-String- в ASPNET-Core. Но как этого добиться в методе TryHandleAsync? Получение ActionContext и т. д.
Заранее спасибо!

Подробнее здесь: https://stackoverflow.com/questions/791 ... t-redirect
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»