В моем специальном промежуточном программном обеспечении для исключений я хочу обрабатывать исключения и возвращать тот же ресурс с удобным для пользователя сообщением.
Например, когда Account/Add
выдает SqlException
, я возвращаю Account/Add
ответ с сообщением, которое хранится в TempData
из промежуточного программного обеспечения исключений. Я уже сделал эти штуки с движком просмотра.
Я нашел этот метод расширения и использование для этой цели, с этим, вы можете вернуть все реализации IActionResult
из промежуточного программного обеспечения, отличное расширение. Однако я не мог узнать, как вернуть мое обычное представление, которое находится в папке моих представлений, например Views/Account/Add
.
ПО промежуточного слоя исключений
private readonly RequestDelegate _next;
public ExceptionHandler(RequestDelegate next)
{
_next = next;
}
public async Task Invoke(HttpContext context)
{
try
{
await _next.Invoke(context);
}
catch (Exception ex)
{
HandleException(context, ex);
}
}
private void HandleException(HttpContext context, Exception exception)
{
//handle exception, log it and other stuff...
//....
var result = new ViewResult
{
ViewName = context.Request.Path.ToString(),
};
//WithDanger is an extension method writes message to tempdata
result.WithDanger("Error", exception.ToString());
//Extension method
context.WriteResultAsync(result);
}
Это то, что я пробовал, но это не работает, как я ожидал, он возвращает пустую страницу, кажется, он не запускает механизм просмотра бритвы для создания моей страницы запроса.
Как я могу заставить свое промежуточное ПО возвращать ViewResult
с моим существующим представлением?