溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么在asp.net core中配置重新加載應(yīng)用

發(fā)布時(shí)間:2021-05-25 16:23:13 來(lái)源:億速云 閱讀:177 作者:Leah 欄目:開(kāi)發(fā)技術(shù)

這篇文章給大家介紹怎么在asp.net core中配置重新加載應(yīng)用,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

asp.net core重新加載應(yīng)用配置Intro

我把配置放在了數(shù)據(jù)庫(kù)或者是Redis里,配置需要修改的時(shí)候我要直接修改數(shù)據(jù)庫(kù),然后調(diào)用一個(gè)接口去重新加載應(yīng)用配置,于是就嘗試寫(xiě)一個(gè)運(yùn)行時(shí)重新加載配置的接口。

Configuration 重新加載實(shí)現(xiàn)

重新加載配置的接口其實(shí)很簡(jiǎn)單,經(jīng)過(guò)看 Configuration 的源碼可以知道,如果想要重新加載應(yīng)用配置,需要一個(gè) IConfigurationRoot 對(duì)象,而 IConfigurationRoot 其實(shí)可以直接拿注入服務(wù)中的 IConfiguration 對(duì)象,服務(wù)中的 IConfiguration 對(duì)象也是實(shí)現(xiàn)了 IConfigurationRoot 接口的實(shí)例。后面我們一起看源碼就更清晰了。

來(lái)看實(shí)現(xiàn)重新加載配置的代碼

using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;

namespace TestWebApplication.Controllers
{
  [Route("api/[controller]")]
  public class ConfigurationsController : Controller
  {
    private readonly IConfigurationRoot _configuration;

    public ConfigurationsController(IConfiguration configuration)
    {
      _configuration = configuration as IConfigurationRoot;
    }

    [HttpGet]
    public IActionResult Get()
    {
      return Ok(new
      {
        RootUser = _configuration.GetAppSetting("RootUser") // 這里 GetAppSetting 是一個(gè)自定義擴(kuò)展方法,獲取AppSettings 節(jié)點(diǎn)下的配置信息
      });
    }

    [HttpPut]
    public IActionResult Put()
    {
      _configuration.Reload();
      return Ok();
    }
  }
}

是不是很簡(jiǎn)單,下面我們來(lái)嘗試一下,你可以參考這個(gè)示例項(xiàng)目

因?yàn)槟J(rèn)的項(xiàng)目配置會(huì)監(jiān)聽(tīng) appsettings.json 文件是否修改,如果已修改就會(huì)重新reload,這里我新加一個(gè)文件,這里設(shè)置 reloadOnChangefalse,示例代碼如下:

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
      WebHost.CreateDefaultBuilder(args)
        .ConfigureAppConfiguration(configBuilder =>
        {
          configBuilder.AddJsonFile("abc.json", optional: true, reloadOnChange: false);
        })
        .UseStartup<Startup>();

abc.json 的文件內(nèi)容如下:

{
 "AppSettings": {
  "TestNumber": 12,
  "RootUser": "WeihanLi"
 }
}

dotnet run 啟動(dòng)網(wǎng)站,然后在瀏覽器中訪問(wèn) http://localhost:5000/api/configurations

怎么在asp.net core中配置重新加載應(yīng)用

然后我們修改 abc.json 文件

{
 "AppSettings": {
  "TestNumber": 12,
  "RootUser": "WeihanLi 123"
 }
}

修改保存之后刷新剛才的頁(yè)面,可以看到還是剛才的內(nèi)容,證明并沒(méi)有重新加載配置,接下來(lái)嘗試我們的重新加載配置方法

使用 postman 或 fiddler 或其他你喜歡的工具發(fā)一個(gè) PUT 請(qǐng)求到 http://localhost:5000/api/configurations,這里我使用 postman 調(diào)用 PUT 接口重新加載配置

怎么在asp.net core中配置重新加載應(yīng)用

返回 200 即接口調(diào)用成功,重新刷新剛才的頁(yè)面就可以看到頁(yè)面上的數(shù)據(jù)已經(jīng)發(fā)生變化,這也就證明了我們重新加載配置的接口生效了。

怎么在asp.net core中配置重新加載應(yīng)用

源碼解析

來(lái)看 ConfigurationBuilder 在 Build 的時(shí)候做了什么,ConfigurationBuilder 源碼

怎么在asp.net core中配置重新加載應(yīng)用

可以看到這里最后返回的是一個(gè) IConfigurationRoot 對(duì)象,再來(lái)看 IConfigurationRoot 源碼

怎么在asp.net core中配置重新加載應(yīng)用

可以看到 IConfigurationRoot 定義了一個(gè) Reload 的方法,這個(gè)方法會(huì)從下面的 Providers 中重新加載配置,看到這里我們就知道可以通過(guò) IConfigurationReload 方法來(lái)重新加載應(yīng)用程序的配置了,然后我們來(lái)看 WebHost.CreateDefaultBuilder(args).Build() 做了什么
https://github.com/aspnet/AspNetCore/blob/master/src/DefaultBuilder/src/WebHost.cs

怎么在asp.net core中配置重新加載應(yīng)用

這里我們可以看到為什么 appsettings.json 文件會(huì)自動(dòng) reload 配置,可以看到最后返回了一個(gè) WebHostBuilder 對(duì)象

看 Asp.Net core WebHostBuilder 對(duì)象的 Build 方法 https://github.com/aspnet/AspNetCore/blob/master/src/Hosting/Hosting/src/WebHostBuilder.cs

BuildCommonServices 可以看到這樣一段代碼 https://github.com/aspnet/AspNetCore/blob/master/src/Hosting/Hosting/src/WebHostBuilder.cs

怎么在asp.net core中配置重新加載應(yīng)用

上面我們已經(jīng)知道 ConfigurationBuilder Build 之后返回的是一個(gè) IConfigurationRoot 對(duì)象,而這里注入是一個(gè) IConfiguration 對(duì)象(IConfigurationRoot 實(shí)現(xiàn) IConfiguration 接口),所以我們就可以從依賴注入中獲取 IConfiguration 對(duì)象直接當(dāng)作 IConfigurationRoot 來(lái)使用,這也就是為什么我們會(huì)直接獲取一個(gè) IConfiguration 對(duì)象直接 as IConfigurationRoot

ASP.NET 是什么

ASP.NET 是開(kāi)源,跨平臺(tái),高性能,輕量級(jí)的 Web 應(yīng)用構(gòu)建框架,常用于通過(guò) HTML、CSS、JavaScript 以及服務(wù)器腳本來(lái)構(gòu)建網(wǎng)頁(yè)和網(wǎng)站。

關(guān)于怎么在asp.net core中配置重新加載應(yīng)用就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI