【发布时间】:2020-07-13 21:40:12
【问题描述】:
我的应用程序正在运行,我能够从 appsettings.json 获取值,当我不得不更改项目的文件结构时,我不再能够获取配置详细信息。
我的配置文件 (appsettings.json) 如下所示:
{ "Jwt": { "Key":"bs::", "Issuer":"SomeIssuer" } }
注意:这只是“Jwt”部分。
当我打电话时:
var jwtConfig = Configuration.GetSection("Jwt");
jwtConfig["Key"];
jwtConfig 值为空。我也试过了:
Configuration.GetSection("Jwt:Key").Value
但没有运气。
当我运行“dotnet run watch”时,一切正常。但是如果我尝试使用 vs 代码进行调试,我会收到一条错误消息,指出字符串为空。
我的 Program.cs 文件:
public static void Main(string[] args)
{
var host = CreateHostBuilder(args).Build();
using (var scope = host.Services.CreateScope())
{
var services = scope.ServiceProvider;
try
{
var context = services.GetRequiredService<DataContext>();
context.Database.Migrate();
Seed.SeedUsers(context);
}
catch (Exception ex)
{
var logger = services.GetRequiredService<ILogger<Program>>();
logger.LogError(ex, "An error occured during migration.");
}
}
host.Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(WebBuilder => {
WebBuilder.UseStartup<Startup>();
});
Startup.cs 文件中的相关行:
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<DataContext>(x =>
{
x.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"));
});
services.AddControllers();
services.AddCors();
var jwtConfig = Configuration.GetSection("Jwt");
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options => {
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(jwtConfig["Key"])),
ValidateIssuer = false,
ValidateAudience = false
};
});
提前致谢。
【问题讨论】:
-
其他设置呢?它们是空的还是只是这个?
-
@PeterCsala,我使用 appsettings.json 的 Jwt 部分编辑了帖子。
-
你检查过
Configuration.Providers下是否列出了对应的json文件吗?您应该寻找JsonConfigurationProvider,其中Source应该是PhysicalFileProvider,它的Path应该指向正确的asppsettings.json 文件。 (在 VS 中调试时很容易检查) -
@PeterCsal,非常感谢,你帮我解决了我的问题。检查我的 JsonConfigurationProvider 的路径后,我注意到它指向错误的路径,然后我更新了我的 launch.json 文件,将“cwd”值更改为向上两个文件夹。谢谢。
-
很高兴它对您有所帮助。我留下了一个答案,在那里我更详细地捕捉了这个过程。