在我的创业公司中,我添加了以下代码:
app.UseStatusCodePagesWithReExecute("/Home/Error", "?statusCode={0}");
app.UseMiddleware<ExceptionHandlingMiddleware>();
在我的控制器中,我添加了:
[AllowAnonymous]
public IActionResult Error(int? statusCode = null)
{
return View(new ErrorViewModel {
RequestId = Activity.Current?.Id ??
HttpContext.TraceIdentifier,
StatusCode = statusCode
});
}
我还有这个中间件类,可以捕获500个:
public class ExceptionHandlingMiddleware
{
private readonly RequestDelegate _next;
public ExceptionHandlingMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task InvokeAsync(HttpContext context)
{
try
{
await _next(context);
}
catch (Exception)
{
context.Response.Clear();
context.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
}
}
}
我可以捕获404和500。其他所有内容都返回404(包括401)。 如果我进行调试,则“错误”操作中的statusCode始终为404。
如何获取statusCode以反映现实情况(即401)?