我有一个基本上是从默认 Razor Pages 模板创建的默认 ASP.NET Core 2.2 项目。
现在,在解决方案资源管理器 -> 依赖项中有一个名为“分析器”的节点。
首先,一开始我不知道它是做什么用的。我想我现在知道了,但它仍然有点模糊。
其次,为什么它有一个警告图标?与其子节点相同。
注意:我不在“NuGet”节点下,所以这不是关于缺少依赖项或类似问题的问题。
第三;如果这个“功能”只是为了迷惑我,为什么会在那里?!
在我的asp.net core 2.0网络应用程序中,我有一个ISecurityTokenValidator用于验证令牌的自定义。
它依赖于存储库来执行db查找-存储库本身被设置为作用域依赖项:
services.AddScoped<IMyRepository>(MyRepository);
Run Code Online (Sandbox Code Playgroud)
现在,由于ISecurityTokenValidator的设置方式而变得有趣。
它添加在ConfigureServices:
.AddJwtBearer(options =>
{
options.SecurityTokenValidators.Clear();
options.SecurityTokenValidators.Add(new MyTokenValidator(services.BuildServiceProvider()));
})
Run Code Online (Sandbox Code Playgroud)
它是这样的:
public class MyTokenValidator : ISecurityTokenValidator
{
private readonly IServiceProvider _serviceProvider;
public MyTokenValidator(IServiceProvider serviceProvider)
{
_serviceProvider = serviceProvider;
}
public bool CanReadToken(string securityToken) => true;
public ClaimsPrincipal ValidateToken(string securityToken, TokenValidationParameters validationParameters,
out SecurityToken validatedToken)
{
var serviceScopeFactory = _serviceProvider.GetRequiredService<IServiceScopeFactory>();
using (var scope = serviceScopeFactory.CreateScope())
{
var myRepository = scope.ServiceProvider.GetService<IMyRepository>();
var principalFactory = scope.ServiceProvider.GetService<IUserClaimsPrincipalFactory<User>>();
// Use the repo....
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,由于IsecurityTokenProvider …