.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") 。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM