這篇文章給大家介紹怎么在asp.net core中配置重新加載應(yīng)用,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。
創(chuàng)新互聯(lián)是一家專業(yè)提供平魯企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站制作、成都做網(wǎng)站、HTML5建站、小程序制作等業(yè)務(wù)。10年已為平魯眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計(jì)公司優(yōu)惠進(jìn)行中。asp.net core重新加載應(yīng)用配置Intro
我把配置放在了數(shù)據(jù)庫(kù)或者是Redis里,配置需要修改的時(shí)候我要直接修改數(shù)據(jù)庫(kù),然后調(diào)用一個(gè)接口去重新加載應(yīng)用配置,于是就嘗試寫一個(gè)運(yùn)行時(shí)重新加載配置的接口。
Configuration 重新加載實(shí)現(xiàn)
重新加載配置的接口其實(shí)很簡(jiǎn)單,經(jīng)過看Configuration
的源碼可以知道,如果想要重新加載應(yīng)用配置,需要一個(gè)IConfigurationRoot
對(duì)象,而IConfigurationRoot
其實(shí)可以直接拿注入服務(wù)中的IConfiguration
對(duì)象,服務(wù)中的IConfiguration
對(duì)象也是實(shí)現(xiàn)了IConfigurationRoot
接口的實(shí)例。后面我們一起看源碼就更清晰了。
來看實(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)單,下面我們來嘗試一下,你可以參考這個(gè)示例項(xiàng)目
因?yàn)槟J(rèn)的項(xiàng)目配置會(huì)監(jiān)聽 appsettings.json 文件是否修改,如果已修改就會(huì)重新reload,這里我新加一個(gè)文件,這里設(shè)置reloadOnChange
為false
,示例代碼如下:
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)站,然后在瀏覽器中訪問 http://localhost:5000/api/configurations
然后我們修改 abc.json 文件
{ "AppSettings": { "TestNumber": 12, "RootUser": "WeihanLi 123" } }
修改保存之后刷新剛才的頁面,可以看到還是剛才的內(nèi)容,證明并沒有重新加載配置,接下來嘗試我們的重新加載配置方法
使用 postman 或 fiddler 或其他你喜歡的工具發(fā)一個(gè) PUT 請(qǐng)求到http://localhost:5000/api/configurations
,這里我使用 postman 調(diào)用 PUT 接口重新加載配置
返回 200 即接口調(diào)用成功,重新刷新剛才的頁面就可以看到頁面上的數(shù)據(jù)已經(jīng)發(fā)生變化,這也就證明了我們重新加載配置的接口生效了。
源碼解析
來看ConfigurationBuilder
在 Build 的時(shí)候做了什么,ConfigurationBuilder
源碼
可以看到這里最后返回的是一個(gè)IConfigurationRoot
對(duì)象,再來看IConfigurationRoot
源碼
可以看到IConfigurationRoot
定義了一個(gè)Reload
的方法,這個(gè)方法會(huì)從下面的Providers
中重新加載配置,看到這里我們就知道可以通過IConfiguration
的Reload
方法來重新加載應(yīng)用程序的配置了,然后我們來看WebHost.CreateDefaultBuilder(args).Build()
做了什么
https://github.com/aspnet/AspNetCore/blob/master/src/DefaultBuilder/src/WebHost.cs
這里我們可以看到為什么 appsettings.json 文件會(huì)自動(dòng) reload 配置,可以看到最后返回了一個(gè)WebHostBuilder
對(duì)象
看 Asp.Net coreWebHostBuilder
對(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
上面我們已經(jīng)知道ConfigurationBuilder
Build 之后返回的是一個(gè)IConfigurationRoot
對(duì)象,而這里注入是一個(gè)IConfiguration
對(duì)象(IConfigurationRoot
實(shí)現(xiàn)IConfiguration
接口),所以我們就可以從依賴注入中獲取IConfiguration
對(duì)象直接當(dāng)作IConfigurationRoot
來使用,這也就是為什么我們會(huì)直接獲取一個(gè)IConfiguration
對(duì)象直接as IConfigurationRoot
ASP.NET 是開源,跨平臺(tái),高性能,輕量級(jí)的 Web 應(yīng)用構(gòu)建框架,常用于通過 HTML、CSS、JavaScript 以及服務(wù)器腳本來構(gòu)建網(wǎng)頁和網(wǎng)站。
關(guān)于怎么在asp.net core中配置重新加載應(yīng)用就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。
網(wǎng)頁標(biāo)題:怎么在asp.netcore中配置重新加載應(yīng)用-創(chuàng)新互聯(lián)
文章起源:http://m.kartarina.com/article42/ccgghc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、網(wǎng)站制作、服務(wù)器托管、網(wǎng)頁設(shè)計(jì)公司、網(wǎng)站排名、動(dòng)態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容