如何捕获asp.net核心中的401错误?

时间:2018-06-22 15:32:33

标签: .net asp.net-mvc error-handling .net-core http-status-codes

在我的创业公司中,我添加了以下代码:

            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)?

1 个答案:

答案 0 :(得分:0)

您可以检查我的代码here。它是全局句柄异常,因此您可以捕获401异常,但是我认为您需要抛出错误代码才能使全局处理程序异常捕获401错误代码