gpt4 book ai didi

c# - 如何在 .net 核心 JwtBearerOptions.Events 中使用依赖注入(inject)?

转载 作者:行者123 更新时间:2023-12-01 21:50:37 25 4
gpt4 key购买 nike

JwtBearer 的 .Net Core Api 如下所示:

_services
.AddJwtBearer(options =>
{
options.Events.OnAuthenticationFailed += MyMethod;
});

它实际上只是一个函数。现在我想使用服务配置中的 ILogger,以便在记录失败的身份验证请求时使用。问题是我此时没有 ILogger 的实例,而且我也没有真正看到获取它或使用工厂方法的好方法,因为我没有也有 ServiceProvider

我是这样解决的:

var loggerForAuthentication = _services.BuildServiceProvider().GetService<ILogger>();

这将构建整个 DI 容器以返回我的 ILogger。这种方法有一些缺点,例如为这个确切的服务构建器生成它自己的单例,看起来也不正确。

还有其他方法吗?

最佳答案

依赖注入(inject)容器仅在应用程序启动时构建一次。

当身份验证失败时会触发事件,因此会发生请求。不需要再次构建 DI 容器,因为已经有可用的实例。通过访问 HttpContext通过这个请求,我们可以获得 ILogger<T> 的一个实例.

services.AddAuthentication()
.AddJwtBearer(options =>
{
options.Events = new JwtBearerEvents
{
OnAuthenticationFailed = MyMethod()
};
});



private static Func<AuthenticationFailedContext, Task> MyMethod()
{
return ctx =>
{
if (ctx.HttpContext.Request != null)
{
var logger = ctx.HttpContext.RequestServices.GetRequiredService<ILogger<Startup>>();
logger.LogError(0, ctx.Exception, "Token validation failed");
}

return Task.CompletedTask;
};
}

关于c# - 如何在 .net 核心 JwtBearerOptions.Events 中使用依赖注入(inject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59500284/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com