• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ASP.NetCore解读appsettings.json

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

环境:ASP.NET Core3.1

ASP.NET Core是一个全新的Web开发平台,微软在它上面构建了MVC、SingalR、GRPC、Orleans这样广泛使用的Web框架,我们先以MVC框架为例介绍利用ASP.NET Core构建项目的常见名词。这篇文章介绍appsettings.json 

ASP.NET  Core MVC项目文件夹解读

 

在开发项目的过程当中,生产环境与调试环境的配置是不一样的,比如连接字符串。 ASP .NET Core 支持利用环境变量来动态配置 JSON 文件。ASP.NET Core 引用了一个特定的环境变量 ASPNETCORE_ENVIRONMENT 来描述应用程序当前运行的环境。这个变量可以被设置为任何你喜欢的值,但是有三个值被约定使用: DevelopmentStaging 和 Production。

二、Appsettings.json

  • 首先在 ASP .NET Core 项目当中添加一个appsettings.json(默认都有该文件)文件,内容如下图:

  

  • 再继续添加 appsettings.Development.json和appsettings.Production.json两个配置文件。解决方案管理器如下图:

  • 我们可以在appsettings.Development.json和appsettings.Production.json分别设置相应的配置信息,比如数据库连接

  

三、自定义配置json

有时候一个复杂的项目配置信息比较多,Appsettings.json会很复杂所以一般都会把一些单独分离出来,比如将数据库连接配置分离出来。

  • 首先在 ASP .NET Core 项目当中添加一个connectionStrings.json文件,内容如下:

  • 再继续添加 connectionStrings.Development.json和connectionStrings.Production.json两个配置文件。如下图:

之前有同事问,我们添加了一个自定义的json文件,应用是如何也晓得的呢?IHostBuilder提供了一个扩展方法ConfigureAppConfiguration,它的作用就是将我们自定义的json文件注入到项目中,能够被应用所识别。ConfigureAppConfiguration方法可累加,也就是说你可以利用ConfigureAppConfiguration方法加入多个json文件。如:

public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseKestrel();
                    webBuilder.UseStartup<Startup>();
                })
                //指定自定义的配置json
                .ConfigureAppConfiguration((h, c) =>
                {
                    c.AddJsonFile($"appsettings_ratelimit.json", true, true);
                });

使用的时候和使用appsettings.json一样,不用指定json的文件名称。为什么呢?看下AddJsonFile方法的源码如下:

// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

using System;
using System.Collections.Generic;

namespace Microsoft.Extensions.Configuration
{
    /// <summary>
    /// Used to build key/value based configuration settings for use in an application.
    /// </summary>
    public class ConfigurationBuilder : IConfigurationBuilder
    {
        /// <summary>
        /// Returns the sources used to obtain configuration values.
        /// </summary>
        public IList<IConfigurationSource> Sources { get; } = new List<IConfigurationSource>();

        /// <summary>
        /// Gets a key/value collection that can be used to share data between the <see cref="IConfigurationBuilder"/>
        /// and the registered <see cref="IConfigurationProvider"/>s.
        /// </summary>
        public IDictionary<string, object> Properties { get; } = new Dictionary<string, object>();

        /// <summary>
        /// Adds a new configuration source.
        /// </summary>
        /// <param name="source">The configuration source to add.</param>
        /// <returns>The same <see cref="IConfigurationBuilder"/>.</returns>
        public IConfigurationBuilder Add(IConfigurationSource source)
        {
            if (source == null)
            {
                throw new ArgumentNullException(nameof(source));
            }

            Sources.Add(source);
            return this;
        }

        /// <summary>
        /// Builds an <see cref="IConfiguration"/> with keys and values from the set of providers registered in
        /// <see cref="Sources"/>.
        /// </summary>
        /// <returns>An <see cref="IConfigurationRoot"/> with keys and values from the registered providers.</returns>
        public IConfigurationRoot Build()
        {
            var providers = new List<IConfigurationProvider>();
            foreach (var source in Sources)
            {
                var provider = source.Build(this);
                providers.Add(provider);
            }
            return new ConfigurationRoot(providers);
        }
    }
}

四、设置环境

1、方案一

ASP.NET Core控制环境切换最核心的东西是“ASPNETCORE_ENVIRONMENT”环境变量,它直接控制当前应用程序运行的环境类型。您可以通过在项目上右键菜单选择“属性”选项,然后切换到“调试”标签来修改此环境变量。如下图:

 

此环境变量框架默认提供了三个值,当然也可以定义其它的值:

  • Development(开发)
  • Staging(预演)
  • Production(生产)

2、方案二

也可以通过ASP.Net Core包含的launchSettings.json的文件设置环境,可以在项目中“Properties”文件夹中找到该文件。

  

五、读取appsettings.json

有2种方法,一种叫丑陋的方法 —— IConfiguration ,一种叫优雅的方法 —— IOptions 。

1、先看丑陋的方法

比如在项目中需要读取 appsettings.Development.json中的数据库连接字符串,上边已经介绍了如何根据环境切换配置,如果想读取appsettings.Production.json的配置,就按照上边的两种方式切换即可。  

  • 首先在 Startup 的 ConfigureServices() 方法中进行注入:

  • 然后在HomeController中调用:

  • 展示效果: 

 

2、优雅的方法

比如在项目中需要读取 appsettings.Development.json中的数据库连接字符串,上边已经介绍了如何根据环境切换配置,如果想读取appsettings.Production.json的配置,就按照上边的两种方式切换即可。

  • 首先我们在appsettings.Development.json 都添加一个 ConnectionStrings节点。 

   

  • 然后定义一个存放连接字符串的配置类 ConnectionStrings(类的名称要和节点名称保持一致): 

  • 在 Startup 的 ConfigureServices() 中注入进去: 

  

  • 然后在HomeController中调用,给 HomeController的构造函数参数中添加 IOptions<ConnectionStrings> 接口,通过 IOptions<ConnectionStrings> 读取配置: 

  • 效果如下: 

六、读取自定义配置Json

1、第一种方法:IConfiguration方式

  • 在根目录建一个PersonConfig.json配置文件 

   

  

  • 首先在Program中, 调用 ConfigureAppConfiguration 以指定应用的配置提供程序: 

    

  • 然后在HomeController中调用:

 

  • 效果展示:

 

  

2、第二种方式 IOPtions   

  • 在根目录建一个PersonConfig.json配置文件  

   

 

  • 首先在Program中, 调用 ConfigureAppConfiguration 以指定应用的配置提供程序: 

 

  • 新建实体:(类的名称要和节点名称一致)

  

  • 在startup的 ConfigureServices中注入:

  • 然后在HomeController中调用:

 

  • 展示效果:

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
(转)ASP.NET反射发布时间:2022-07-10
下一篇:
asp.net2.0如何设置webservice引用的动态地址发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap