У меня проблема при попытке получить значения из файла json и привязать их к классу JwtSettings с помощью класса IOptions <>, но каждый раз, когда значение равно нулю или 0 класс запуска:
public class Startup
{
private readonly IOptions<JwtSettings> _settings;
public Startup(IConfiguration configuration, IOptions<JwtSettings> settings)
{
Configuration = configuration;
_settings = settings;
}
public IConfiguration Configuration { get; }
public IContainer ApplicationContainer { get; private set; }
// This method gets called by the runtime. Use this method to add services to the container.
public IServiceProvider ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
services.AddOptions();
services.Configure<JwtSettings>(Configuration.GetSection("JwtSettings"));
services.AddJwt(_settings);
var builder = new ContainerBuilder();
//register commandModules
builder.Populate(services);
builder.RegisterModule(new ContainerModules(Configuration));
ApplicationContainer = builder.Build();
return new AutofacServiceProvider(ApplicationContainer);
}
Метод расширений при использовании параметров:
public static void AddJwt(this IServiceCollection services, IOptions<JwtSettings> setting)
{
IConfiguration configuration;
using (var serviceProvider = services.BuildServiceProvider())
{
configuration = serviceProvider.GetService<IConfiguration>();
}
services.AddAuthentication(o =>
{
o.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
o.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(cfg =>
{
cfg.TokenValidationParameters = new TokenValidationParameters
{
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(setting.Value.Key)),
ValidIssuer = setting.Value.Issuer,
ValidateIssuer = false,
ValidateAudience = false,
ValidateIssuerSigningKey = true,
ValidateLifetime = true
};
});
}
В классе программы i Добавить вызов ConfigureAppConfiguration при создании веб-хоста для указания конфигурации приложения
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, config) =>
{
config.SetBasePath(Directory.GetCurrentDirectory());
config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: false);
config.AddCommandLine(args);
})
.UseStartup<Startup>();
Параметры приложения json выглядятчто: