ASP.NET Core读取AppSettings

http://www.tuicool.com/articles/rQruMzV

今天在把之前一个ASP.NET MVC5的Demo项目重写成ASP.NET Core,发现原先我们一直用的ConfigurationManager.AppSettings[]读取Web.config中的AppSettings节点的方法没用了。.NET Core有许多新的做法,我挑了一个最合适我自己项目的来分享一下我的实现方式。

首先,原来的代码:

web.config

...
  <appSettings>
    ...
    <add key="StorageConnectionString" value="DefaultEndpointsProtocol=https;AccountName=YOURACCOUNT;AccountKey=YOURKEY" />
    <add key="AzureStorageAccountContainer" value="YOURCONTAINER" />
   ...
  </appSettings>
...

Controller:

private static CloudBlobContainer GetBlobContainer()
{
    string connectionString = WebConfigurationManager.AppSettings["StorageConnectionString"];
...
        blobClient.GetContainerReference(WebConfigurationManager.AppSettings["AzureStorageAccountContainer"]);
    return container;
}

这也是ASP.NET以来我们一直用来读web.config的方式。如果你想了解更装逼的方式,可以参考我的这篇文章: 《如何高逼格读取Web.config中的AppSettings》 ,文章里解决的问题主要是一个强类型的配置项,然而ASP.NET Core可以更方便的实现这个逼格。

首先,ASP.NET Core的设置文件用的是appsettings.json,而不是web.config,对于ASP.NET Core来说,web.config只是在部署到Windows服务器的时候给IIS用的配置,和ASP.NET Core一点卵关系都没有。

这个appsettings.json定义的格式如下:

{
    "Logging": {
        "IncludeScopes": false,
        "LogLevel": {
            "Default": "Debug",
            "System": "Information",
            "Microsoft": "Information"
        }
    }
}

我把自己的配置项加进去就可以这样写:

{
    "Logging": {
        "IncludeScopes": false,
        "LogLevel": {
            "Default": "Debug",
            "System": "Information",
            "Microsoft": "Information"
        }
    },
    "AppSettings": {
        "StorageConnectionString": "DefaultEndpointsProtocol=https;AccountName=YOURACCOUNTNAME;AccountKey=YOURKEY",
        "AzureStorageAccountContainer": "YOURCONTAINERNAME"
    }
}

接下来,新建一个C#的Class,对应你的配置项:

public class AppSettings
{
    public string StorageConnectionString { get; set; }

    public string AzureStorageAccountContainer { get; set; }
}

然后打开Startup.cs,把ConfigureServices这个方法改成这样(假设你是用ASP.NET Core的Web Application模板创建的网站)

public void ConfigureServices(IServiceCollection services)
{
    // Add framework services.
    services.AddOptions();
    services.Configure<AppSettings>(Configuration.GetSection("AppSettings"));
    services.AddMvc();
}

这个方法是做IOC的,是一种装逼模式,我们要装进去的逼用的是Snippet

Microsoft.Extensions.Options.ConfigurationExtensions

所以,得确保你的project.json里面有这项:

"dependencies": {
...
    "Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0",
...
},

Configuration这个对象,在ASP.NET Core Web Applictaion的默认模板里已经自动撸好了,代码如下:

public Startup(IHostingEnvironment env)
{
    var builder = new ConfigurationBuilder()
        .SetBasePath(env.ContentRootPath)
        .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
        .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
        .AddEnvironmentVariables();
    Configuration = builder.Build();
}

public IConfigurationRoot Configuration { get; }

然后Configuration.GetSection("AppSettings")这个里面的"AppSettings"对应的就是刚才json文件里配置的"AppSettings"节点。

services.Configure<AppSettings>(Configuration.GetSection("AppSettings"));

这行代码的意思就是,一旦我们的应用里要用AppSettings这个类型,就用Configuration.GetSection("AppSettings")的结果来替代,.NET Core会自动帮我们做类型转换和mapping,把我在 《如何高逼格读取Web.config中的AppSettings》 里面装的逼全装掉了。

最后,你在Controller里用的时候就得按照IOC的一贯装逼方法,把构造函数装成这样:

private AppSettings AppSettings { get; set; }

public HomeController(IOptions<AppSettings> settings)
{
    AppSettings = settings.Value;
}

然后就能愉快的使用强类型的config了:

private CloudBlobContainer GetBlobContainer()
{
    string connectionString = AppSettings.StorageConnectionString;
    CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionString);
    CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
    CloudBlobContainer container =
        blobClient.GetContainerReference(AppSettings.AzureStorageAccountContainer);
    return container;
}
时间: 2025-01-04 18:55:57

ASP.NET Core读取AppSettings的相关文章

ASP.NET CORE读取appsettings.json的配置

如何在appsettings.json配置应用程序设置,微软给出的方法:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration 下面是我的做法: 因为我建立的是空项目什么都没有,好多东西都需要新建和引用,新建appsettings.json文件,然后添加一个AppSettings字段,包含配置和值 在Models文件夹下创建一个AppSettingsModel.cs NuGet包管理器引用或者在project

ASP.NET Core读取appsettings.json配置文件信息

1.在配置文件appsettings.json里新增AppSettings节点 { "Logging": { "LogLevel": { "Default": "Warning" } }, "AppSettings": { "HttpUrl": "http://www.ehongcn.com", "Copyright": "山南远宏科技有

.net core读取appsettings.json配置

官方文档:href 在老版本的ASP.NET里,项目的全局配置一般都存在web.config里的appSettings里,只需要用ConfigurationManager.AppSettings["Foo"]就可以把名为Foo的变量取出来.在ASP.NET Core里,访问配置文件的方式也有了很大变化.但是ASP.NET Core里web.config已经被appsettings.json替换,加上ASP.NET Core里大量用了依赖注入(Dependency Injection),

.net core读取appsettings.config中文乱码问题

发现读取appsettings.json配置文件中的中文在控制台输出的时候显示乱码,而日志组件直接写中文的时候没有问题. 用记事本打开appsettings.json,另存为的时候,编码设置为 “UTF-8”, 原文地址:https://www.cnblogs.com/51net/p/12169843.html

ASP .NET CORE 读取配置文件的方法

老式的config文件在ASP.net core2.0中变成了appsettings.json,如果想要读取自定义配置,可以写如下代码 { "Logging": { "IncludeScopes": false, "LogLevel": { "Default": "Warning" } }, "Wizards": [ { "Name": "Gandalf&q

.Net Core 读取 appsettings.json

1. 首先些一个类 public class MySettings { public string P1 { get; set; } public string P2 { get; set; } } 2. 在 appsettings.json 中添加配置项 { "Logging": { "IncludeScopes": false, "LogLevel": { "Default": "Warning" }

ASP.NET Core 如何设置发布环境

在ASP.NET Core中自带了一些内置对象,可以读取到当前程序处于什么样的环境当中,比如在ASP.NET Core的Startup类的Configure方法中,我们就会看到这么一段代码: public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExce

ASP.NET Core入门(一)

大家好,很荣幸您点了开此篇文章,和我一起来学习ASP.NET Core,此篇文字为<ASP.NET Core入门>系列中的第一篇,本系列将以一个博客系统为例,从第一行代码,到系统发布上线(linux).如有错误,请联系我,让我们共同成长,进步,谢谢.下面进入正题: 首先,看到这篇文章可能是一位新手,下面由我先介绍下ASP.NET Core: ASP.NET Core 是一个新的开源和跨平台的框架,用于构建如 Web 应用.物联网(IoT)应用和移动后端应用等连接到互联网的基于云的现代应用程序.

【无私分享:ASP.NET CORE 项目实战(第六章)】读取配置文件(一) appsettings.json

目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 在我们之前的Asp.net mvc 开发中,一提到配置文件,我们不由的想到 web.config 和 app.config,在 core 中,我们看到了很多的变化,新的配置系统显得更加轻量级,具有更好的扩展性,并且支持多样化的数据源. 博客园对于这个的讲解很多,比如:Artche ,但是,没有点基础看老A的博客还是有些吃力的,对于老A介绍的配置,我也是看的一头雾水,在后面的文章中,我会用像我们这些菜鸟容易接受的方式,重新解