博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ASP.NET Core读取AppSettings
阅读量:7042 次
发布时间:2019-06-28

本文共 3412 字,大约阅读时间需要 11 分钟。

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

 

 

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

首先,原来的代码:

web.config

...  
...
...
...

Controller:

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

这也是ASP.NET以来我们一直用来读web.config的方式。如果你想了解更装逼的方式,可以参考我的这篇文章:  ,文章里解决的问题主要是一个强类型的配置项,然而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
(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
(Configuration.GetSection("AppSettings"));

 

 

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

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

private AppSettings AppSettings { get; set; }public HomeController(IOptions
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; }

转载于:https://www.cnblogs.com/LuoEast/p/6815361.html

你可能感兴趣的文章
暴力破解WiFi密码
查看>>
Zend Studio使用教程:使用Zend Studio和Zend Server进行根本原因分析 (二)
查看>>
golang的fmt包String(),Error(),Format(),GoString()的接口实现
查看>>
Java技术转(兼顾)产品经理——读《快速转行做产品经理》有感
查看>>
成为优秀Java开发人员的10件事
查看>>
Kali Linux安装教程
查看>>
Android缓存处理
查看>>
JavaScript 数据类型检测终极解决方案
查看>>
年赚百万游戏主播!玩转Python后:几行代码轻松“吃鸡” 附源码
查看>>
【python】使用简单的python语句编写爬虫 定时拿取信息并存入txt
查看>>
卡拉OK歌词原理和实现高仿Android网易云音乐
查看>>
小编带着小白看springboot源码6
查看>>
javascript原型链
查看>>
Re: 从零开始的【comic spider】《最简单的实现》(上)
查看>>
Java 单例模式学习理解
查看>>
ios创建可拖动的视图
查看>>
Linux常用的基本命令12
查看>>
ORACLE数据库事务隔离级别介绍
查看>>
DHCP服务和http服务
查看>>
bitnami 使用记录
查看>>