我开发了一个全局异常处理中间件,并尝试将异常传递给ErrorCotroller
我的 ASP.NET Core MVC 应用程序。
中间件:
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");
}
}
我尝试使用HttpContext.Items["exception"]
将异常传递给ErrorController
,但没有成功。
我怎样才能实现这个目标?
像下面这样改变你的中间件,它对我有用。
而且我不熟悉你的逻辑,你可以根据需要修改它。
测试结果
GlobalExceptionHandlingMiddleware.cs
在这里注册中间件