中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在asp.net core中配置重新加載應用

發布時間:2021-05-25 16:23:13 來源:億速云 閱讀:184 作者:Leah 欄目:開發技術

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

asp.net core重新加載應用配置Intro

我把配置放在了數據庫或者是Redis里,配置需要修改的時候我要直接修改數據庫,然后調用一個接口去重新加載應用配置,于是就嘗試寫一個運行時重新加載配置的接口。

Configuration 重新加載實現

重新加載配置的接口其實很簡單,經過看 Configuration 的源碼可以知道,如果想要重新加載應用配置,需要一個 IConfigurationRoot 對象,而 IConfigurationRoot 其實可以直接拿注入服務中的 IConfiguration 對象,服務中的 IConfiguration 對象也是實現了 IConfigurationRoot 接口的實例。后面我們一起看源碼就更清晰了。

來看實現重新加載配置的代碼

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 是一個自定義擴展方法,獲取AppSettings 節點下的配置信息
      });
    }

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

是不是很簡單,下面我們來嘗試一下,你可以參考這個示例項目

因為默認的項目配置會監聽 appsettings.json 文件是否修改,如果已修改就會重新reload,這里我新加一個文件,這里設置 reloadOnChangefalse,示例代碼如下:

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

abc.json 的文件內容如下:

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

dotnet run 啟動網站,然后在瀏覽器中訪問 http://localhost:5000/api/configurations

怎么在asp.net core中配置重新加載應用

然后我們修改 abc.json 文件

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

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

使用 postman 或 fiddler 或其他你喜歡的工具發一個 PUT 請求到 http://localhost:5000/api/configurations,這里我使用 postman 調用 PUT 接口重新加載配置

怎么在asp.net core中配置重新加載應用

返回 200 即接口調用成功,重新刷新剛才的頁面就可以看到頁面上的數據已經發生變化,這也就證明了我們重新加載配置的接口生效了。

怎么在asp.net core中配置重新加載應用

源碼解析

來看 ConfigurationBuilder 在 Build 的時候做了什么,ConfigurationBuilder 源碼

怎么在asp.net core中配置重新加載應用

可以看到這里最后返回的是一個 IConfigurationRoot 對象,再來看 IConfigurationRoot 源碼

怎么在asp.net core中配置重新加載應用

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

怎么在asp.net core中配置重新加載應用

這里我們可以看到為什么 appsettings.json 文件會自動 reload 配置,可以看到最后返回了一個 WebHostBuilder 對象

看 Asp.Net core WebHostBuilder 對象的 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中配置重新加載應用

上面我們已經知道 ConfigurationBuilder Build 之后返回的是一個 IConfigurationRoot 對象,而這里注入是一個 IConfiguration 對象(IConfigurationRoot 實現 IConfiguration 接口),所以我們就可以從依賴注入中獲取 IConfiguration 對象直接當作 IConfigurationRoot 來使用,這也就是為什么我們會直接獲取一個 IConfiguration 對象直接 as IConfigurationRoot

ASP.NET 是什么

ASP.NET 是開源,跨平臺,高性能,輕量級的 Web 應用構建框架,常用于通過 HTML、CSS、JavaScript 以及服務器腳本來構建網頁和網站。

關于怎么在asp.net core中配置重新加載應用就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

沂水县| 涡阳县| 逊克县| 青浦区| 平山县| 佛教| 怀集县| 吉安县| 弋阳县| 梨树县| 抚宁县| 沅陵县| 滦南县| 望城县| 类乌齐县| 晋江市| 平远县| 泽州县| 夏河县| 安徽省| 宜宾市| 汽车| 康保县| 武安市| 桦川县| 嘉善县| 赣州市| 辉南县| 洞头县| 天长市| 裕民县| 中西区| 大方县| 临清市| 乐东| 南昌市| 嵊州市| 广宗县| 宜川县| 冷水江市| 五寨县|