首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在自定义筛选器.net核心中使用依赖项注入始终为空

在自定义筛选器.net核心中使用依赖项注入始终为空
EN

Stack Overflow用户
提问于 2018-10-05 15:43:38
回答 1查看 316关注 0票数 0

当我在TokenAuthorizeFilter中使用DI时,_User总是只返回null.Not的_User,这只是我遇到的一个例子。我尝试了不同的方法,但仍然不起作用。

我现在很困惑,请告诉我为什么。谢谢

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
public class TokenAuthorizeFilter : BaseAuthorizeFilter
{
    var identity = _User;
}

对不起,我的问题里没有提到什么。我从另一个类调用TokenAuthorizeFilter中的方法,所以我将其定义为静态的。现在我改变了我的写作方式,我在微软的网站上找到了答案。非常感谢。

https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/filters?view=aspnetcore-2.1#ifilterfactory-implemented-on-your-attribute

EN

回答 1

Stack Overflow用户

发布于 2018-10-08 15:42:36

您的帖子中有多个问题。

  • 您通过services.AddSingleton<IUserResolverService, UserResolverService>();注册IUserResolverService,但是您注入了UserResolverService userService
  • 您不应该将ClaimsIdentity _User定义为静态,它应该是request isolation

<代码>F29

试着像下面这样改变:

代码语言:javascript
复制
    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()

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52660686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档