当我在TokenAuthorizeFilter中使用DI时,_User总是只返回null.Not的_User,这只是我遇到的一个例子。我尝试了不同的方法,但仍然不起作用。
我现在很困惑,请告诉我为什么。谢谢
public class BaseAuthorizeFilter : IAuthorizationFilter, IActionFilter
{
public static ClaimsIdentity _User;
public static IHttpContextAccessor _accessor;
public BaseAuthorizeFilter(UserResolverService userService, IHttpContextAccessor accessor)
{
_User = userService.GetUser();
_accessor = accessor;
}
}
...
UserResolverService.cs
public class UserResolverService : IUserResolverService
{
private readonly IHttpContextAccessor _context;
public UserResolverService(IHttpContextAccessor context)
{
_context = context;
}
public ClaimsIdentity GetUser()
{
return _context.HttpContext.User.Identity as ClaimsIdentity;
//await
}
}
public interface IUserResolverService
{
ClaimsIdentity GetUser();
}
TokenAuthorizeFilter.cs
public class TokenAuthorizeFilter : BaseAuthorizeFilter
{
var identity = _User;
}
对不起,我的问题里没有提到什么。我从另一个类调用TokenAuthorizeFilter中的方法,所以我将其定义为静态的。现在我改变了我的写作方式,我在微软的网站上找到了答案。非常感谢。
发布于 2018-10-08 15:42:36
您的帖子中有多个问题。
services.AddSingleton<IUserResolverService, UserResolverService>();
注册IUserResolverService
,但是您注入了UserResolverService userService
,ClaimsIdentity _User
定义为静态,它应该是request isolation <代码>F29
试着像下面这样改变:
public class BaseAuthorizeFilter : IAuthorizationFilter, IActionFilter
{
public ClaimsIdentity _User;
public IHttpContextAccessor _accessor;
public BaseAuthorizeFilter(IUserResolverService userService, IHttpContextAccessor accessor)
{
_User = userService.GetUser();
_accessor = accessor;
}
TokenAuthorizeFilter
与以下代码之间的差异: public TokenAuthorizeFilter : BaseAuthorizeFilter {public TokenAuthorizeFilter(IUserResolverService userService,IHttpContextAccessor accessor):base(userService,accessor) { var identity = _User;}}TokenAuthorizeFilter
注册为AddScoped
services.AddScoped();;services.AddSingleton();services.AddSingleton()
https://stackoverflow.com/questions/52660686
复制相似问题