Desenvolvi um middleware de tratamento de exceção global e tentei passar minha exceção para ErrorCotroller
meu aplicativo ASP.NET Core MVC.
Middleware:
public class GlobalExceptionHandlingMiddleware
{
private readonly RequestDelegate _next;
public GlobalExceptionHandlingMiddleware(RequestDelegate request)
{
_next = request;
}
public async Task Invoke(HttpContext httpContext)
{
try
{
await _next(httpContext);
}
catch(Exception ex)
{
await HandleExceptionAsync(httpContext, ex);
}
}
private async Task HandleExceptionAsync(HttpContext httpContext, Exception ex)
{
httpContext.Response.Redirect("/Error/Error");
httpContext.Items["exception"] = ex;
}
}
ErrorController
:
public class ErrorController : Controller
{
private readonly ILogger<ErrorController> _logger;
public ErrorController(ILogger<ErrorController> logger)
{
_logger = logger;
}
[Route("/Error/Error")]
public IActionResult Error()
{
Exception exec = (Exception)HttpContext.Items["exception"];
ViewData["message"] = exec.Message;
_logger.LogError(exec, "Internal server error");
return View("Error");
}
}
Tentei usar HttpContext.Items["exception"]
para passar a exceção para o ErrorController
, mas não obteve sucesso.
Como posso conseguir isso?
Mude seu middleware como abaixo, funciona para mim.
E não estou familiarizado com sua lógica, você pode modificá-la conforme necessário.
Resultado do teste
GlobalExceptionHandlingMiddleware.cs
Registre middlware aqui