我无法记住我在哪里看到这个,但在为我的.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);
}
在我的localhost上运行它一切正常。
但是,当我将此应用程序部署到Azure时,我假设我需要在应用程序服务的常规设置中创建应用程序设置。所以我创建了一个名为BasePathSettings的应用程序设置,并将设置的json复制到值:
{ "BaseImageFolder": "imagePath", "BaseApiUrl": "apiUrl" }
在配置服务代码中,Azure barfs似乎声称web.config在NTFS中没有正确的权限。我猜测真正的罪魁祸首是如何从Azure应用程序设置中读取json值。
我甚至可以在那里使用json吗?如果是这样,它是否需要采用不同的格式?
答案 0 :(得分:5)
我甚至可以在那里使用json吗?如果是这样,它是否需要采用不同的格式?
要向Azure Web应用程序添加分层结构设置,我们可以在部分名称和键名称之间放置一个冒号。例如,
use BasePathSettings:BaseImageFolder to set your folder
use BasePathSettings:BaseApiUrl to set your url
答案 1 :(得分:2)
我制作了一个名为BasePathSettings的应用设置,并将 json 复制为设置值
格式应为 -
basepathsettings:baseimagefolder (just single slash)
basepathsettings:baseapiurl
答案 2 :(得分:0)
如果尝试在采用json值的单个WebApp设置中定义“ BasePathSettings”,则GetSection将返回null。
作为一种解决方法,我使用此扩展方法替代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;
}