You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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: 8
  • Server: 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 11:45:58