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

DotNet HotChocolate独立Azure Function:如何从host.json读取连接串与JWT配置

在HotChocolate独立Azure Function中读取host.settings.json配置

1. 配置host.settings.json结构

首先在host.settings.json中添加ConnectionStrings和JwtSettings节点:

{
  "version": "2.0",
  "logging": {
    "applicationInsights": {
      "samplingSettings": {
        "isEnabled": true,
        "excludedTypes": "Request"
      }
    }
  },
  "ConnectionStrings": {
    "Default": "Server=localhost; User=root; Database=FINDUS; Password=xxxxxx"
  },
  "JwtSettings": {
    "SigningKey": "23kfioejrkdjfkelrkdoemvasde31sxnmd",
    "Issuer": "CwkSocial",
    "Audiences": ["SwaggerUI"]
  }
}

2. 创建配置实体类

和普通DotNet API一致,定义对应的数据类:

public class JwtSettings
{
    public string SigningKey { get; set; } = string.Empty;
    public string Issuer { get; set; } = string.Empty;
    public List<string> Audiences { get; set; } = new();
}

3. 在Program.cs中读取并注入配置

在Azure Function的Program.cs里,通过IConfiguration读取配置,绑定到实体并注入服务,同时配置HotChocolate:

var host = new HostBuilder()
    .ConfigureFunctionsWorkerDefaults()
    .ConfigureServices(services =>
    {
        var configuration = services.BuildServiceProvider().GetRequiredService<IConfiguration>();

        // 绑定JwtSettings并注入单例
        var jwtSettings = new JwtSettings();
        configuration.Bind(nameof(JwtSettings), jwtSettings);
        services.AddSingleton(jwtSettings);

        // 或者使用Configure方式(适合需要IOptions<T>注入的场景)
        services.Configure<JwtSettings>(configuration.GetSection(nameof(JwtSettings)));

        // 读取连接字符串
        var defaultConnectionString = configuration.GetConnectionString("Default");
        // 示例:注入DbContext(根据实际ORM调整)
        // services.AddDbContext<YourDbContext>(options =>
        //     options.UseMySql(defaultConnectionString, ServerVersion.AutoDetect(defaultConnectionString)));

        // 配置HotChocolate GraphQL服务
        services.AddGraphQLServer()
            .AddQueryType<Query>()
            .AddAuthorization()
            // 结合JwtSettings配置认证
            .AddJwtBearerAuthentication(options =>
            {
                options.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuer = true,
                    ValidIssuer = jwtSettings.Issuer,
                    ValidateAudience = true,
                    ValidAudiences = jwtSettings.Audiences,
                    ValidateIssuerSigningKey = true,
                    IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtSettings.SigningKey))
                };
            });
    })
    .Build();

host.Run();

本地开发注意事项

本地调试时,Azure Function优先读取local.settings.json,可以将配置放在该文件的Values节点下(用冒号表示层级):

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
    "ConnectionStrings:Default": "Server=localhost; User=root; Database=FINDUS; Password=xxxxxx",
    "JwtSettings:SigningKey": "23kfioejrkdjfkelrkdoemvasde31sxnmd",
    "JwtSettings:Issuer": "CwkSocial",
    "JwtSettings:Audiences:0": "SwaggerUI"
  }
}

内容的提问来源于stack exchange,提问作者otter otter

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 07:50:11