在net core中,请在您自己的类中使用服务,然后使用new class()调用该类

时间:2019-12-17 10:49:35

标签: c# asp.net-core .net-core token

我创建了一个类来验证我自己的令牌。在该类中,我需要使用一项服务,该服务先前已在startup.cs中与services.AddScoped添加在一起。我该怎么办?

x.SecurityTokenValidators.Add(new DynamicKeyJwtValidationHandler());

在DynamicKeyJwtValidationHandler类中,我需要使用服务。

public class DynamicKeyJwtValidationHandler : JwtSecurityTokenHandler, ISecurityTokenValidator
    {
        public SecurityKey GetKeyForClaimedId(string claimedId)
        {
            throw new NotImplementedException();
        }

        public override ClaimsPrincipal ValidateToken(string token, TokenValidationParameters validationParameters, out SecurityToken validatedToken)
        {
            ClaimsPrincipal cp = new ClaimsPrincipal();
            validatedToken = null;
            try
            {
                cp = base.ValidateToken(token, validationParameters, out validatedToken);
            } catch (Exception) {}

            return cp;
        }
    }

2 个答案:

答案 0 :(得分:1)

在类的构造函数中使用依赖注入

public class DynamicKeyJwtValidationHandler : JwtSecurityTokenHandler, ISecurityTokenValidator
    {
        private readonly YourService _service
        public DynamicKeyJwtValidationHandler(YourService service){
             _service = service
        }
        public SecurityKey GetKeyForClaimedId(string claimedId)
        {
            throw new NotImplementedException();
        }

        public override ClaimsPrincipal ValidateToken(string token, TokenValidationParameters validationParameters, out SecurityToken validatedToken)
        {
            ClaimsPrincipal cp = new ClaimsPrincipal();
            validatedToken = null;
            try
            {
                cp = base.ValidateToken(token, validationParameters, out validatedToken);
            } catch (Exception) {}

            return cp;
        }
    }

答案 1 :(得分:0)

我希望这会有所帮助。

public class DynamicKeyJwtValidationHandler : JwtSecurityTokenHandler, ISecurityTokenValidator
    {
        public SecurityKey GetKeyForClaimedId(string claimedId)
        {
            throw new NotImplementedException();
        }
        public override ClaimsPrincipal ValidateToken(string token, TokenValidationParameters validationParameters, out SecurityToken validatedToken)
        {
            //
            // if your class is in the different assembly then 
            // Assembly.GetEntryAssembly().GetType("yourNamespace.YourClass");
            Type type = Assembly.GetEntryAssembly().GetType("YourClass");
            object entity = Activator.CreateInstance(type);
            var instanceOfClass = (YourClass)entity;
            instanceOfClass.Go();

            //


            ClaimsPrincipal cp = new ClaimsPrincipal();
            validatedToken = null;
            try
            {
                cp = base.ValidateToken(token, validationParameters, out validatedToken);
            }
            catch (Exception) { }

            return cp;
        }
    }

    public class YourClass
    {
        public void Go()
        {

        }
    }