pan*_*mic 5 c# .net-core asp.net-core
拥有 .net core 版本 3.1.8 和 asp.net core 版本 3.1.8 的 .net core 工作服务 我在从工作服务加载用户密钥时遇到问题,但在 asp.net core 项目中同样有效。
从 ASP.NET Core 和 .NET Core Worker 服务调用的通用方法
public static string GetFioApiKey(this IConfiguration configuration)
=> configuration["PaymentServiceSecrets:FioApiKey"];
Run Code Online (Sandbox Code Playgroud)
工人服务的 csproj
<Project Sdk="Microsoft.NET.Sdk.Worker">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<UserSecretsId>8d19c97d-a2fb-4a51-a694-9635b9c0c42c</UserSecretsId>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Hosting" Version="3.1.8" />
<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="3.1.8" />
</ItemGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)
Worker服务的startup.cs
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration(config => config.AddUserSecrets(Assembly.GetExecutingAssembly()))
.ConfigureServices((hostContext, services) =>
{
// simplified
services.AddSingleton<IApplicationSettings>(applicationSettings =>
{
var appSettings = new ApplicationSettings
{
FioApiKey = config.GetFioApiKey()
};
return appSettings;
});
services.AddHostedService<Worker>();
});
}
Run Code Online (Sandbox Code Playgroud)
找到了github 问题的链接,尝试应用解决方法但仍然不起作用
Bry*_*n W 11
这里没有提到的一个“问题”是,在 WorkerServices 中,环境变量“DOTNET_ENVIRONMENT”必须设置为“Development”,否则用户密钥甚至不会尝试加载。这与 ASP.Net 项目中使用的“ASPNETCORE_ENVIRONMENT”环境变量形成对比。
即,在 Properties/launchSettings.json 中
{
// .. Ommitted
"profiles": {
"MyWorkerService": {
"commandName": "Project",
"environmentVariables": {
"DOTNET_ENVIRONMENT": "Development"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
通常,新的项目模板已经为您准备好了这一点,但就我而言,当将 ASP.Net 项目(不需要 Web 服务器功能)转换为 Worker Services 时,launchSettings.json 配置文件将“ASPNETCORE_ENVIRONMENT”设置为“开发”,这在 WorkerServices 中实际上毫无用处。
小智 0
你应该试试这个
public static YourConfigObject GetFioApiKey(this IConfiguration configuration)
=> configuration.GetSection("PaymentServiceSecrets").Get<YourConfigObject>();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2680 次 |
| 最近记录: |