.NET Core配置绑定在Ubuntu Nginx环境中失效及疑问
.NET Core应用在Ubuntu+Nginx环境下配置绑定失败的问题及解决
问题概述
Windows 11开发环境中正常运行的.NET Core 8应用,部署到Ubuntu 20.04(搭配Nginx应用服务器)后,Swagger可正常访问,但实际调用API时抛出内部服务器错误。日志显示启动代码中的配置绑定未正常工作,AuthorizationOptions实例绑定后无值,但该逻辑在开发机及VirtualBox中的Windows服务器上完全正常。
相关代码片段
配置绑定代码(启动逻辑中)
var authorizationOptions = new AuthorizationOptions(); config.GetSection(AuthorizationOptions.ConfigKey).Bind(authorizationOptions); // 绑定后authorizationOptions无值
AuthorizationOptions.cs
public class AuthorizationOptions { public const string ConfigKey = "Authorization"; public string? ActiveProvider { get; set; } public List<AuthorizationProviderOptions>? Providers { get; set; } }
AuthorizationProviderOptions.cs
public class AuthorizationProviderOptions { public string Name { get; set; } = string.Empty; public string Domain { get; set; } = string.Empty; public string Audience { get; set; } = string.Empty; public string SecretKey { get; set; } = string.Empty; public string Issuer { get; set; } = string.Empty; public string TokenLifetime { get; set; } = string.Empty; }
appsettings.json
{ "Authorization": { "ActiveProvider": "JWT", "Providers": [ { "Name": "Auth0", "Domain": "XXXXXXXXXXXXXXXXXXXXX", "SecretKey": "", "Issuer": "", "Audience": "XXXXXXXXXXXXXXXXXXXXX", "TokenLifetime": "20" }, { "Name": "JWT", "Domain": "", "SecretKey": "XXXXXXXXXXXXXXXXXXXXX", "Issuer": "XXXXXXXXXXXXXXXXXXXXX", "Audience": "XXXXXXXXXXXXXXXXXXXXX", "TokenLifetime": "20" } ] } }
环境信息
.NET Version: 8Server: Ubuntu 20.04
补充更新
更新1:配置代码的调用位置
Program.cs(API项目)
var builder = WebApplication.CreateBuilder(args); builder.Services.AddCAAuthentication(builder.Configuration);
AuthorizationInjectorServiceExtension.cs(API项目引用的类库中)
public static class AuthorizationInjectorServiceExtension { public static IServiceCollection AddCAAuthentication(this IServiceCollection services, IConfigurationManager config) { var authorizationOptions = new AuthorizationOptions(); config.GetSection(AuthorizationOptions.ConfigKey).Bind(authorizationOptions); // 基于authorizationOptions的值执行其他操作 } }
更新2:问题解决及疑惑
将appsettings.json上移一级目录后,配置绑定恢复正常,问题解决。但暂不清楚具体原因:
- 原目录结构:
/var/www/[mysitename]/html/[包含appsettings.json的站点文件] - 解决后的目录结构:
/var/www/[mysitename]/html/[站点文件] /var/www/[mysitename]/appsettings.json
注:使用html子目录是为了遵循Nginx/Ubuntu的部署风格,后续可根据需求调整。
内容的提问来源于stack exchange,提问作者Sang Suantak
相关产品推荐
相关产品推荐

