Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何记录;“未经授权”;(401)答复_C#_Asp.net Core - Fatal编程技术网

C# 如何记录;“未经授权”;(401)答复

C# 如何记录;“未经授权”;(401)答复,c#,asp.net-core,C#,Asp.net Core,我正在使用JWT令牌进行身份验证 services.AddAuthentication(options => { options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme; }) .AddJwtBearer(jwtOptions => { jwtOptions.TokenValidationParameters = tokenValidationParameters;

我正在使用JWT令牌进行身份验证

services.AddAuthentication(options =>
{
    options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
})
    .AddJwtBearer(jwtOptions =>
    {
        jwtOptions.TokenValidationParameters = tokenValidationParameters;
    });
在我的控制器中,然后使用
[Authorize]
属性来确保需要对调用方进行身份验证。这个很好用

但是:如果未经授权的用户发出请求,他会得到401响应。我能否以某种方式“中断”此响应并记录未经授权的呼叫

编辑

一个建议是添加一个“异常中间件”,我已经这样做了,但未经验证的调用不会抛出异常

services.AddMvc()
    .AddMvcOptions(options =>
    {
        // Order is important! A request will run from top to bottom through each filter.
        options.Filters.Add(typeof(MyExceptionFilterAttribute));
    });
以及属性:

public class MyExceptionFilterAttribute : ExceptionFilterAttribute
{
    /// <summary>
    /// ctor
    /// </summary>
    public MyExceptionFilterAttribute()
    {

    }
    /// <summary>
    /// 
    /// </summary>
    /// <param name="context"></param>
    public override void OnException(ExceptionContext context)
    {


        ApplicationLogger.LogError("Bad request", context.Exception);
    }
}
公共类MyExceptionFilterAttribute:ExceptionFilterAttribute
{
/// 
///执行器
/// 
公共MyExceptionFilterAttribute()
{
}
/// 
/// 
/// 
/// 
公共覆盖无效OneException(ExceptionContext上下文)
{
ApplicationLogger.LogError(“错误请求”,context.Exception);
}
}
这个怎么样:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILogger<Startup> logger)
{
    // ...

    app.Use(async (context, next) =>
    {
        await next();

        if (context.Response.StatusCode == (int)System.Net.HttpStatusCode.Unauthorized)
        {
            logger.LogWarning("Unauthorized request");
        }
    });

    app.UseAuthentication();

    // ...
}
public void配置(IApplicationBuilder应用程序、IHostingEnvironment环境、ILogger记录器)
{
// ...
应用程序使用(异步(上下文,下一步)=>
{
等待下一个();
if(context.Response.StatusCode==(int)System.Net.HttpStatusCode.Unauthorized)
{
logger.LogWarning(“未经授权的请求”);
}
});
app.UseAuthentication();
// ...
}

您可以添加一个错误中间件,用于捕获异常并将其记录在某处。