如何在 .NET Core 中进行转换为 Azure 应用程序设置的应用程序设置?
How to make app settings in .NET Core that translate to Azure app settings?
我不记得是在哪里看到的,但是在为我的 .NET Core MVC 应用程序设置应用程序配置时,我遵循了博客上的建议。我创建了一个这样的模型来保存我的应用程序需要的一些设置:
public class BasePathSettings
{
public string BaseImageFolder { get; set; }
public string BaseApiUrl { get; set; }
}
我的 StartUp 有这个...
public void ConfigureServices(IServiceCollection services)
{
...
// this adds the base paths to container
services.Configure<BasePathSettings>(Configuration.GetSection("BasePathSettings"));
....
}
appsettings.json 里面有这个:
"BasePathSettings": {
"BaseImageFolder": "D:\Images\",
"BaseApiUrl": "http://localhost:50321/"
},
我像这样注入需要此信息的控制器....
private readonly BasePathSettings _settings;
public ClientsController(IOptions<BasePathSettings> settings)
{
_settings = settings.Value;
_client = new HttpClient();
_client.BaseAddress = new Uri(_settings.BaseApiUrl);
}
运行 在我的本地主机上一切正常。
但是,当我将此应用程序部署到 Azure 时,我假设我需要在应用程序服务的常规设置中创建应用程序设置。所以我做了一个名为 BasePathSettings 的应用程序设置,并将设置的 json 复制到值中:
{ "BaseImageFolder": "imagePath", "BaseApiUrl": "apiUrl" }
似乎 Azure barfs 在 ConfigureServices 代码中声称 web.config 在 NTFS 中没有正确的权限。我猜真正的罪魁祸首是如何从 Azure 应用程序设置中读取 json 值。
我可以在那里使用 json 吗?如果是这样,是否需要采用不同的格式?
Can I even use json there? If so, does it need formatted differently?
要将层次结构设置添加到 Azure Web 应用程序,我们可以在部分名称和键名称之间放置一个冒号。例如,
use BasePathSettings:BaseImageFolder to set your folder
use BasePathSettings:BaseApiUrl to set your url
I made an app setting called BasePathSettings and copied the json for the setting into the value
格式应为 -
basepathsettings:baseimagefolder (just single slash)
basepathsettings:baseapiurl
如果您尝试在采用 json 值的单个 WebApp 设置中定义 "BasePathSettings",则 GetSection 将 return 为空。
作为变通方法,我使用此扩展方法代替 GetSection() :
public static T GetWebAppSection<T>(this IConfiguration config, string key)
where T:class
{
T configValue = config.GetSection(key).Get<T>();
if(configValue == default(T))
{
configValue = JsonConvert.DeserializeObject<T>(config[key]);
}
return configValue;
}
我不记得是在哪里看到的,但是在为我的 .NET Core MVC 应用程序设置应用程序配置时,我遵循了博客上的建议。我创建了一个这样的模型来保存我的应用程序需要的一些设置:
public class BasePathSettings
{
public string BaseImageFolder { get; set; }
public string BaseApiUrl { get; set; }
}
我的 StartUp 有这个...
public void ConfigureServices(IServiceCollection services)
{
...
// this adds the base paths to container
services.Configure<BasePathSettings>(Configuration.GetSection("BasePathSettings"));
....
}
appsettings.json 里面有这个:
"BasePathSettings": {
"BaseImageFolder": "D:\Images\",
"BaseApiUrl": "http://localhost:50321/"
},
我像这样注入需要此信息的控制器....
private readonly BasePathSettings _settings;
public ClientsController(IOptions<BasePathSettings> settings)
{
_settings = settings.Value;
_client = new HttpClient();
_client.BaseAddress = new Uri(_settings.BaseApiUrl);
}
运行 在我的本地主机上一切正常。
但是,当我将此应用程序部署到 Azure 时,我假设我需要在应用程序服务的常规设置中创建应用程序设置。所以我做了一个名为 BasePathSettings 的应用程序设置,并将设置的 json 复制到值中:
{ "BaseImageFolder": "imagePath", "BaseApiUrl": "apiUrl" }
似乎 Azure barfs 在 ConfigureServices 代码中声称 web.config 在 NTFS 中没有正确的权限。我猜真正的罪魁祸首是如何从 Azure 应用程序设置中读取 json 值。
我可以在那里使用 json 吗?如果是这样,是否需要采用不同的格式?
Can I even use json there? If so, does it need formatted differently?
要将层次结构设置添加到 Azure Web 应用程序,我们可以在部分名称和键名称之间放置一个冒号。例如,
use BasePathSettings:BaseImageFolder to set your folder
use BasePathSettings:BaseApiUrl to set your url
I made an app setting called BasePathSettings and copied the json for the setting into the value
格式应为 -
basepathsettings:baseimagefolder (just single slash)
basepathsettings:baseapiurl
如果您尝试在采用 json 值的单个 WebApp 设置中定义 "BasePathSettings",则 GetSection 将 return 为空。
作为变通方法,我使用此扩展方法代替 GetSection() :
public static T GetWebAppSection<T>(this IConfiguration config, string key)
where T:class
{
T configValue = config.GetSection(key).Get<T>();
if(configValue == default(T))
{
configValue = JsonConvert.DeserializeObject<T>(config[key]);
}
return configValue;
}