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
相关产品推荐
相关产品推荐

