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.

Masoud
  • 65
  • 9
  • 1
    Does this answer your question? [How to use appsettings.json in Asp.net core 6 Program.cs file](https://stackoverflow.com/questions/69390676/how-to-use-appsettings-json-in-asp-net-core-6-program-cs-file) – gsharp Jan 01 '22 at 07:26
  • @gsharp No it isn't – Masoud Jan 01 '22 at 07:42
  • @Masoud Check out my question : https://stackoverflow.com/questions/69390676/how-to-use-appsettings-json-in-asp-net-core-6-program-cs-file – Sajed Jan 01 '22 at 08:11
  • @sajed No it's not the answer ☺ – Masoud Jan 01 '22 at 10:47
  • @Masoud why not? – gsharp Jan 01 '22 at 15:35
  • Does this answer your question? [read connectionstring outside startup from appsetting.json in vNext](https://stackoverflow.com/questions/34269106/read-connectionstring-outside-startup-from-appsetting-json-in-vnext) – Tonu Jan 01 '22 at 15:56

2 Answers2

2
var JwtLoginTokenValidationDurationMinutes = builder.Configuration.GetSection("Configurations:JwtLoginTokenValidationDurationMinutes").Value;
M.imp
  • 120
  • 11
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
}
Berkay
  • 301
  • 2
  • 7