zoukankan      html  css  js  c++  java
  • .Net Core 获取 appsettings.json 数据

    一、前言

      这是我学习的笔记,如果您看到有不对的地方,欢迎评论区指正!很多时候,我们将系统的配置都放入配置文件中,主要的目的就是为了方便修改!这就是我学习的目的。

    二、具体学习

      在学习获取 AppSettings.json 的数据,首先我们需要了解 Configuration、ConfigurationBuilder 和 ConfigurationProvider .其中 ConfigurationProvider  对象承载着在编程中使用的配置信息,由ConfigurationBuilder 来完成,它利用 ConfigurationProvider 提取源数据将其转化为 Configuration 对象。

    我的配置文件 appsettings.json 文件如下

    {
      "Logging": {
        "LogLevel": {
          "Default": "Information",
          "Microsoft": "Warning",
          "Microsoft.Hosting.Lifetime": "Information"
        }
      },
      "ConnectionStrings": {
        "DefaultConnection": "asdfasdfasdfasdfasdfas"
      },
      "cnblogs": "My CNBlogs Address:https://www.cnblogs.com/gzbit-zxx/",
      "AppSettings": {
        "HttpUrl": "http://www.gzbit.com",
        "Copyright": "gzbit"
      },
      "AllowedHosts": "*",
      "Person": [
        {
          "name": "xfmtl",
          "company": "gzbit",
          "address": [
            {
              "province": "Guizhou Province",
              "city": "Guiyang City"
            },
            {
              "province": "Yunnan Province",
              "city": "Wuhua District"
            }
          ]
        },
        {
          "name": "C# Study",
          "adress": "Microsoft"
        }
      ],
      "Book": {
        "name": "C# Program",
        "publish": "2020-08"
      }
    
    }

    第一种直接使用方式

    直接在 Controller 通过 ConfigurationBuilder 方式获取.

    using System.IO;
    using Microsoft.AspNetCore.Mvc;
    using Microsoft.Extensions.Configuration;
    
    namespace WebApplication1.Controllers
    {
        public class ConfigController : Controller
        {
            public IActionResult Index()
            {
                //加载配置文件
                ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
    
                //添加配置文件路径
                configurationBuilder.SetBasePath(Directory.GetCurrentDirectory())
                    .AddJsonFile("appsettings.json");
    
                var configuration = configurationBuilder.Build();
    
                //获取博客园地址
                var cnblogs = configuration["cnblogs"];
    
                //获取Book名称
                var bookname = configuration.GetValue<string>("Book:name");
    
                //获取幸福摩天轮的第一地区名称
                var addressName = configuration.GetValue<string>("Person:0:address:1:city");
    
                //获取C# 学习的名称
                var cname = configuration.GetValue<string>("Person:1:name");
    
                //获取所在公司
                var companyName= configuration["AppSettings:Copyright"];
    
                return Content(cnblogs);
            }
        }
    }
    

    测试案例截图

     第二种方式在 Startup.cs 中 Startup方法中配置

      (1)、添加一个 Book.cs 类

    namespace WebApplication1.Common
    {
        /// <summary>
        /// 书
        /// </summary>
        public class Book
        {
            /// <summary>
            /// 名称
            /// </summary>
            public string Name { get; set; }
    
            /// <summary>
            /// 发布时间
            /// </summary>
            public string Publish { get; set; }
        }
    }
    

      (2)、在 Startup.cs 中添加代码

    using System.IO;
    using Microsoft.AspNetCore.Builder;
    using Microsoft.AspNetCore.Hosting;
    using Microsoft.Extensions.Configuration;
    using Microsoft.Extensions.DependencyInjection;
    using Microsoft.Extensions.Hosting;
    using WebApplication1.Common;
    
    namespace WebApplication1
    {
        public class Startup
        {
            //定义 _configuration
            public IConfiguration _configuration;
            public Startup()
            {
                //加载配置文件
                ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
    
                //添加配置文件路径
                configurationBuilder.SetBasePath(Directory.GetCurrentDirectory())
                    .AddJsonFile("appsettings.json");
    
                //加载文件
                 _configuration = configurationBuilder.Build();
            }
    
            public void ConfigureServices(IServiceCollection services)
            {
                services.AddControllersWithViews();
    
                //获取配置文件中 Book 数据
                services.Configure<Book>(_configuration.GetSection("Book"));
            }
    
            public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
            {
                if (env.IsDevelopment())
                {
                    app.UseDeveloperExceptionPage();
                }
                else
                {
                    app.UseExceptionHandler("/Home/Error");
                    app.UseHsts();
                }
                app.UseHttpsRedirection();
                app.UseStaticFiles();
    
                app.UseRouting();
    
                app.UseAuthorization();
    
                app.UseEndpoints(endpoints =>
                {
                    endpoints.MapControllerRoute(
                        name: "default",
                        pattern: "{controller=Home}/{action=Index}/{id?}");
                });
            }
        }
    }
    

      (3)、在 Controller 中调用

    using Microsoft.AspNetCore.Mvc;
    using Microsoft.Extensions.Options;
    using WebApplication1.Common;
    
    namespace WebApplication1.Controllers
    {
        public class ConfigController : Controller
        {
            //定义
            private readonly Book _book;
    
            /// <summary>
            /// 构造函数中注入Book
            /// </summary>
            /// <param name="options"></param>
            public ConfigController(IOptions<Book> options) {
                _book = options.Value;
            }
            public IActionResult Index()
            {
                //获取书本名称
                var name = _book.Name;
    
                //获取书本的发布时间
                var publish = _book.Publish;
              
                return Content(_book.Name);
            }
        }
    }
    

      (4)、案例截图

     第三种使用方式,也是 .net core web 默认的方式。

      (1)、在 Startup.cs 中代码如下,同样我们也需要创建相应的类。如 Book.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    using Microsoft.AspNetCore.Builder;
    using Microsoft.AspNetCore.Hosting;
    using Microsoft.AspNetCore.HttpsPolicy;
    using Microsoft.Extensions.Configuration;
    using Microsoft.Extensions.DependencyInjection;
    using Microsoft.Extensions.Hosting;
    using WebApplication1.Common;
    
    namespace WebApplication1
    {
        public class Startup
        {
            // 定义 Configuration
            public IConfiguration Configuration { get; }
            /// <summary>
            /// 依赖注入 IConfiguration
            /// </summary>
            /// <param name="configuration"></param>
            public Startup(IConfiguration configuration)
            {
                Configuration = configuration;
            }
    
            public void ConfigureServices(IServiceCollection services)
            {
                services.AddControllersWithViews();
    
                //获取配置文件中 Book 数据
                services.Configure<Book>(Configuration.GetSection("Book"));
            }
    
            public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
            {
                if (env.IsDevelopment())
                {
                    app.UseDeveloperExceptionPage();
                }
                else
                {
                    app.UseExceptionHandler("/Home/Error");
                    app.UseHsts();
                }
                app.UseHttpsRedirection();
                app.UseStaticFiles();
    
                app.UseRouting();
    
                app.UseAuthorization();
    
                app.UseEndpoints(endpoints =>
                {
                    endpoints.MapControllerRoute(
                        name: "default",
                        pattern: "{controller=Home}/{action=Index}/{id?}");
                });
            }
        }
    }
    

      (2)、在 Controller 使用

    using Microsoft.AspNetCore.Mvc;
    using Microsoft.Extensions.Options;
    using WebApplication1.Common;
    
    namespace WebApplication1.Controllers
    {
        public class ConfigController : Controller
        {
            //定义
            private readonly Book _book;
    
            /// <summary>
            /// 构造函数中注入Book
            /// </summary>
            /// <param name="options"></param>
            public ConfigController(IOptions<Book> options) {
                _book = options.Value;
            }
            public IActionResult Index()
            {
                //获取书本名称
                var name = _book.Name;
                
                //获取书本的发布时间
                var publish = _book.Publish;
              
                return Content(_book.Name);
            }
        }
    }
    

     这就是读取 appsettings 的方式,重点还是读取字符串的三种方式:字符串读取:configuration["cnblogs"]、configuration.GetValue<string>("Book:name")对象读取Configuration.GetSection("Book") 。

  • 相关阅读:
    英雄大乱斗
    深浅拷贝(copy)
    myleecode
    代码量简单统计
    pandas 模块 05
    matplotlib 模块 07
    KVC 和KVO浅谈
    iOS开发中懒加载的使用和限制
    关于空白模板插件的使用
    UIImageC处理
  • 原文地址:https://www.cnblogs.com/gzbit-zxx/p/13831059.html
Copyright © 2011-2022 走看看