1

I want to access the values of the Configurations Variables in another class.

Here is the appsetting.json:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
"AllowedHosts": "*",
"Configurations": {
   "FirstVerificationValidationDurationMinutes": 2,
   "ResendedVerificationValidationDurationMinutes": 2,
   "JwtRegisterTokenValidationDurationMinutes": 30,
   "JwtLoginTokenValidationDurationMinutes": 30
 }
}

And Here I want to use JwtLoginTokenValidationDurationMinutes's value (which is declared inside appsettings.json as you can see ablove) inside the class below:

public async Task<UserCredentialDto> JwtAuthentication(UserCredentialViewModel userCredential)
    {

        var user = await _userService.LoginUser(userCredential);

        if (user is null)
        {
            return new UserCredentialDto
            {
                Status = new StatusMaker().ErrorStatus(user.Status.Message)
            };
        }

        

        //TODO
        var _key = "This is for test";

        var tokenHandler = new JwtSecurityTokenHandler();
        var tokenKey = Encoding.ASCII.GetBytes(_key);


        //var tokenValidationDuration = HERE I NEED THE VALUE //HOW TO ACCESS VALUES FROM appsettings.json?

        var tokenDescriptor = new SecurityTokenDescriptor
        {
            Subject = new ClaimsIdentity(claims),
            Expires = DateTime.UtcNow.AddMinutes(/*tokenValidationDuration*/),
            SigningCredentials = new SigningCredentials(
                new SymmetricSecurityKey(tokenKey),
                SecurityAlgorithms.HmacSha256Signature)
        };

        var token = tokenHandler.CreateToken(tokenDescriptor);


        return new UserCredentialDto
        {
            Token = tokenHandler.WriteToken(token)
        };
    }

}

So how can I access values from appsettings.json ?

I tried using Microsoft.Extensions.Configuration but it seems it doesn't exist in .Net 6.

6

3 Answers 3

2
var JwtLoginTokenValidationDurationMinutes = builder.Configuration.GetSection("Configurations:JwtLoginTokenValidationDurationMinutes").Value;
Sign up to request clarification or add additional context in comments.

Comments

0
public class Configurations
{
   public int FirstVerificationValidationDurationMinutes { get; set; }
   public int ResendedVerificationValidationDurationMinutes{ get; set; }
   public int JwtRegisterTokenValidationDurationMinutes{ get; set; }
   public int JwtLoginTokenValidationDurationMinutes{ get; set; }
}

/*
"Configurations": {
   "FirstVerificationValidationDurationMinutes": 2,
   "ResendedVerificationValidationDurationMinutes": 2,
   "JwtRegisterTokenValidationDurationMinutes": 30,
   "JwtLoginTokenValidationDurationMinutes": 30
 }
*/

in Program.cs

builder.Services.Configure<Configuration>(builder.Configuration.GetSection("Configurations"));

this will add your class object to configuration. than you will call through TOptions<>

Registers a configuration instance which TOptions will bind against.

than you should use dependency injection.

public class SomeService:IService
{
    private readonly Configurations _configurations
    public SomeService(IOptions<Configurations> configurations){
        _configurations = configurations.Value
    }

    //your code
       Expires = DateTime.UtcNow.AddMinutes(_configurations.JwtLoginTokenValidationDurationMinutes),
    //your code
}

Comments

0

By looking at the question it seems that you are talking about a regular class, not startup or program.cs, therefore you wont have access to the builder. In a regular class, you can inject an instance to the configuration class and then use it to read your settings file.

private readonly IConfiguration _configuration;
public ConfigurationDemoController(IConfiguration configuration)
{
    _configuration = configuration;
}

public void Function()
{
    var settingVale= _configuration.GetValue<string>("yourSettingName");
    ...;
}

}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.