如何在.NET Core中进行应用程序设置转换为Azure应用程序设置?

时间:2017-03-16 05:40:14

标签: azure asp.net-core-mvc azure-web-sites application-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);
    }

在我的localhost上运行它一切正常。

但是,当我将此应用程序部署到Azure时,我假设我需要在应用程序服务的常规设置中创建应用程序设置。所以我创建了一个名为BasePathSettings的应用程序设置,并将设置的json复制到值:

 { "BaseImageFolder": "imagePath", "BaseApiUrl": "apiUrl" } 

在配置服务代码中,Azure barfs似乎声称web.config在NTFS中没有正确的权限。我猜测真正的罪魁祸首是如何从Azure应用程序设置中读取json值。

我甚至可以在那里使用json吗?如果是这样,它是否需要采用不同的格式?

3 个答案:

答案 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

enter image description here

答案 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;
    }