如何解决使用.NET核心从PCF访问用户提供的服务变量
我有一个运行在PCF上的.NET核心webapi,我创建了一个包含我的数据库凭据的用户提供的服务(杯子)
cf cups my-proj-db -p '{"username":"dba","password":"dbapass","server":"whateverserver:1433","database":"schools"}'
当我登录PCF并进入
设置->环境变量->查看环境变量
我可以在下面看到用户名,数据库等
"system_env_json": {
"VCAP_SERVICES": {
"user-provided": [...
现在我想检索数据库值,因此在我的.NET代码中
Environment.GetEnvironmentVariable("vcap.services.my-proj-db.credentials.server",EnvironmentVariableTarget.Process)
我也很累EnvironmentVariableTarget.Machine & EnvironmentVariableTarget.User
但是该值始终为null,我知道在Java中这是他们如何检索它,但是如何在.NET Core中实现它?
请注意,如果我直接将服装变量添加到PCF中,例如
cf set-env my-app-name ENV_VAR_NAME MyFunkyName
我能够通过
获取价值Environment.GetEnvironmentVariable("ENV_VAR_NAME",EnvironmentVariableTarget.Process)
感谢帮助!
解决方法
因此,最终,可以使用Steeltoe扩展程序使它正常工作。这是所有必需的东西。
安装以下nuget软件包
Steeltoe.Common.Hosting
Steeltoe.Extensions.Configuration.CloudFoundryCore
Steeltoe.Extensions.Logging.DynamicSerilogCore
Steeltoe.Management.CloudFoundryCore
然后启动Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.ConfigureCloudFoundryOptions(Configuration);
}
然后在program.cs中
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseCloudHosting() //Enable listening on a Env provided port
.AddCloudFoundryConfiguration() //Add cloud-foundry environment variables as a configuration source
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
然后您要在哪个类中访问必须遵循的值
using Microsoft.Extensions.Options;
using Steeltoe.Extensions.Configuration.CloudFoundry;
public class EnvironmentManager
{
private CloudFoundryApplicationOptions _appOptions { get; set; }
private CloudFoundryServicesOptions _serviceOptions { get; set; }
public EnvironmentManager(IOptions<CloudFoundryApplicationOptions> appOptions,IOptions<CloudFoundryServicesOptions> serviceOptions)
{
_appOptions = appOptions.Value;
_serviceOptions = serviceOptions.Value;
}
然后,您可以随时随地访问您可以做的值
var value = _serviceOptions.Services["user-provided"]
.First(q => q.Name.Equals("my-proj-db"))
.Credentials["username"].Value;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。