国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

使用 Asp.net core webapi 集成配置系統(tǒng),提高程序的靈活和可維護性

這篇具有很好參考價值的文章主要介紹了使用 Asp.net core webapi 集成配置系統(tǒng),提高程序的靈活和可維護性。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

使用 Asp.net core webapi 集成配置系統(tǒng),提高程序的靈活和可維護性,C#,asp.net core,c#,.net core,經驗分享

前言:什么是集成配置系統(tǒng)?

集成配置系統(tǒng)的主要目的是將應用程序的配置信息與代碼分離,使得配置信息可以在不需要修改代碼的情況下進行更改。這樣可以提高應用程序的靈活性和可維護性。

ASP.NET Core 提供了一種靈活的配置系統(tǒng),可以輕松地將配置信息從不同的來源加載到應用程序中,并且可以根據環(huán)境變量、命令行參數、JSON 文件、XML 文件、環(huán)境變量等不同來源來管理配置。

本文主要講解如何在 Asp.net core webapi 中應用集成配置系統(tǒng)

Step By Step 步驟

  1. 創(chuàng)建一個 ASP.NET Core webapi 項目

  2. 在 SQL Server 數據庫中手動創(chuàng)建表 T_Configs,用于保存配置信息

    • 表包含Id、Name、Value這3列
    • Id列定義為整數類型的標識列
    • Name列和Value列都定義為字符串類型
    • Name列為配置項的名字
    • Value列為配置項的值
  3. 在T_Configs表中增加兩行數據

    1	Redis	{"ConnStr":"127.0.0.1:16379,allowadmin=true"}
    2	Smtp	{"Host":"smtp.example.com", "UserName":"test", "Password":"mypass123"}
    
  4. 安裝并啟動 Redis

    • 可下載 Redis 便攜包,下載后在命令行窗口啟動即可
    • 下載地址:https://redis.io/download/
  5. 引用以下 Nuget 包:

    StackExchange.Redis
    System.Data.SqlClient
    Zack.AnyDBConfigProvider

  6. 在項目中創(chuàng)建一個SmtpOptions實體類,對應Smtp的配置值

    public record SmtpOptions
    {
    	public string Host { get; set; }
    	public string UserName { get; set; }
    	public string Password { get; set; }
    }
    
  7. 在項目上右擊,選擇【管理用戶機密】,生成 Secrets.json

    • 可以看到在 .csproj 文件中生成了 UserSecretsId 節(jié)點

      <UserSecretsId>29c6a656-872a-40dc-9793-2a9add90e9fe</UserSecretsId>
      
    • Secrets.json 存儲在:

      C:\Users\Jacky\AppData\Roaming\Microsoft\UserSecrets\29c6a656-872a-40dc-9793-2a9add90e9fe\secrets.json
      
    • 編寫 Secrets.json 內容為:

      {
        "ConnectionStrings": { "configServer": "Server=(localdb)\\mssqllocaldb;Database=TestDB;Trusted_Connection=True;MultipleActiveResultSets=true" }
      }
      
    • 關閉 Secrets.json 文件后,右鍵重新【管理用戶機密】可以再次打開 Secrets.json 文件

  8. 打開 Program.cs,編寫代碼進行配置系統(tǒng)的初始化(注意,看代碼注釋

    using StackExchange.Redis;
    using System.Data.SqlClient;
    
    var builder = WebApplication.CreateBuilder(args);
    
    // Add services to the container.
    
    builder.Services.AddControllers();
    // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
    builder.Services.AddEndpointsApiExplorer();
    builder.Services.AddSwaggerGen();
    
    // 1.讀取用戶機密文件中的sqlserver連接串
    builder.Host.ConfigureAppConfiguration((_, configBuilder) => {
    	string connStr = builder.Configuration.GetConnectionString("configServer");
    	configBuilder.AddDbConfiguration(() => new SqlConnection(connStr));
    });
    
    // 2.采用直接讀取builder.Configuration的方式來讀取數據庫中的配置,并注冊服務
    builder.Services.Configure<SmtpOptions>(builder.Configuration.GetSection("Smtp"));
    builder.Services.AddSingleton<IConnectionMultiplexer>(sp => {
    	string connStr = builder.Configuration.GetValue<string>("Redis:ConnStr");
    	return ConnectionMultiplexer.Connect(connStr);
    }); 
    
    var app = builder.Build();
    
    // Configure the HTTP request pipeline.
    if (app.Environment.IsDevelopment())
    {
    	app.UseSwagger();
    	app.UseSwaggerUI();
    }
    
    app.UseHttpsRedirection();
    
    app.UseAuthorization();
    
    app.MapControllers();
    
    app.Run();
    
  9. 在控制器中通過構造方法注入獲取SmtpOptions和Redis連接對象

    using Microsoft.AspNetCore.Mvc;
    using Microsoft.Extensions.Options;
    using StackExchange.Redis;
    
    namespace 配置系統(tǒng)集成1.Controllers
    {
    	[ApiController]
    	[Route("[controller]/[action]")]
    	public class HomeController : ControllerBase
    	{
    		private readonly IOptionsSnapshot<SmtpOptions> smtpOptions;
    		private readonly IConnectionMultiplexer connMultiplexer;
    
    		// 通過構造方法注入獲取SmtpOptions和Redis連接對象
    		public HomeController(
    			IOptionsSnapshot<SmtpOptions> smtpOptions,
    			IConnectionMultiplexer connMultiplexer)
    		{
    			this.smtpOptions = smtpOptions;
    			this.connMultiplexer = connMultiplexer;
    		}
    
    		// 讀取配置信息,連接 Redis 讀取數據
    		[HttpGet]
    		public async Task<string> Index()
    		{
    			var opt = smtpOptions.Value;
    			var timeSpan = connMultiplexer.GetDatabase().Ping();
    			
    			//寫入和讀取 Key-value
    			var database = connMultiplexer.GetDatabase(1);
    			await database.StringSetAsync("name", "Jacky");
    			string str = await database.StringGetAsync("name");
    
    			return $"Smtp:{opt} timeSpan:{timeSpan} str:{str}";
    		}
    	}
    }
    

擴展

為了簡化開發(fā),在ASP.NET Core項目中,WebApplication類的CreateBuilder方法會按照下面的順序來提供默認的配置:文章來源地址http://www.zghlxwxcb.cn/news/detail-789288.html

  1. 加載現(xiàn)有的IConfiguration。
  2. 加載項目根目錄下的appsettings.json
  3. 加載項目根目錄下的appsettings.Environment.json,其中Environment代表當前運行環(huán)境的名字
  4. 當程序運行在開發(fā)環(huán)境下,程序會加載“用戶機密”配置
  5. 加載環(huán)境變量中的配置
  6. 加載命令行中的配置

到了這里,關于使用 Asp.net core webapi 集成配置系統(tǒng),提高程序的靈活和可維護性的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Asp.net core Webapi 如何執(zhí)行定時任務?

    Asp.net core Webapi 如何執(zhí)行定時任務?

    在計算機系統(tǒng)中,定時執(zhí)行一些后臺任務是很常見的場景,比如定時發(fā)送郵件、備份數據等等。 那么,.NET 技術如何通過編程靈活地實現(xiàn)項目里復雜的自定義任務呢? 如果是 Windows 生態(tài),通常來說,可以有這些方式: 編寫一個程序,通過 Windows 內置的任務計劃來定時執(zhí)行。

    2024年02月04日
    瀏覽(90)
  • .net 溫故知新【14】:Asp.Net Core WebAPI  緩存

    .net 溫故知新【14】:Asp.Net Core WebAPI 緩存

    緩存指在中間層中存儲數據的行為,該行為可使后續(xù)數據檢索更快。 從概念上講,緩存是一種性能優(yōu)化策略和設計考慮因素。 緩存可以顯著提高應用性能,方法是提高不常更改(或檢索成本高)的數據的就緒性。 在最新的緩存控制規(guī)范文件RFC9111中,詳細描述了瀏覽器緩存和

    2024年02月05日
    瀏覽(91)
  • Asp.NET Core WebAPI 入門學習筆記,超詳細

    Asp.NET Core WebAPI 入門學習筆記,超詳細

    WebAPI 是一種傳統(tǒng)的方式,用于構建和暴露 RESTUI風格的Web服務。它提供了豐富的功能和靈活性,可以處理各種HTTP請求,并支持各種數據格式,如JSON、XML等。 WebAPI使用控制器(Controllers)和動作方法(ActionMethods)的概念、通過路由配置將請求映射到相應的方法上。 開發(fā)人員可以使用

    2024年04月24日
    瀏覽(97)
  • ASP.NET core WebApi Cors跨域解決

    ASP.NET core WebApi Cors跨域解決

    我用了最新版的Asp.net webapi ,在csdn上面搜跨域如何解決的時候,發(fā)現(xiàn)csdn上面對于.NET技術討論不是很多。沒辦法,只能面向官方文檔和GitHub編程了。 前面兩個已經放棄維護了,我們就不用了。用最新的webApi 我們引入了最新的api后可以在官方網址上查看文檔(有些地址是gitH

    2024年04月29日
    瀏覽(96)
  • asp.net core webapi如何執(zhí)行周期性任務

    asp.net core webapi如何執(zhí)行周期性任務

    新建asp.net core webapi項目,使用Nuget搜索安裝Quartz包。 注意:定時執(zhí)行時間格式,參考連接:https://www.cnblogs.com/wudequn/p/8506938.html 在IIS中找到這個站點所用的程序池,點擊“高級設置…” 在打開的列表中更改以下設置: 回收——固定時間間隔(分鐘) 改為 0 ——虛擬/專用內存

    2024年02月13日
    瀏覽(104)
  • .net 溫故知新【17】:Asp.Net Core WebAPI  中間件

    .net 溫故知新【17】:Asp.Net Core WebAPI 中間件

    到這篇文章為止,關于.NET \\\"溫故知新\\\"系列的基礎知識就完結了,從這一系列的系統(tǒng)回顧和再學習,對于.NET core、ASP.NET CORE又有了一個新的認識。 不光是從使用,還包括這些知識點的原理,雖然深入原理談不上,但對于日常使用也夠了,我想的是知其然,知其所以然。 在實際

    2024年01月18日
    瀏覽(96)
  • ASP.NET CORE WEBAPI 登錄 JWT 鑒權 ,接口權限驗證

    介紹 當今Web開發(fā)中,API的使用越來越廣泛,而API的安全性也變得越來越重要。其中,JWT(JSON Web Token)鑒權和授權是一種常見的解決方案。 本篇文章將會介紹JWT鑒權和授權的原理、實現(xiàn)方式以及注意事項。 什么是JWT? JWT是一種基于JSON格式的開放標準(RFC7519),用于在網絡

    2023年04月21日
    瀏覽(87)
  • asp.net core6 webapi 使用反射批量注入接口層和實現(xiàn)接口層的接口的類到ioc中

    IBLL接口層類庫 BLL實現(xiàn)接口層類庫 program中利用反射批量注入 在控制器中使用構造函數傳參就可以調用已經注冊的所有是是實現(xiàn)接口的類了的實列了

    2024年02月13日
    瀏覽(24)
  • ASP.NET Core —配置系統(tǒng)

    ASP.NET Core —配置系統(tǒng)

    一個應用要運行起來,往往需要讀取很多的預設好的配置信息,根據約定好的信息或方式執(zhí)行一定的行為。 配置的本質就是軟件運行的參數,在一個軟件實現(xiàn)中需要的參數非常多,如果我們以 Hard Code (硬編碼)的方式寫在應用代碼中,這樣配置就會很亂,而且后續(xù)也不容易修

    2024年02月08日
    瀏覽(20)
  • ASP.NET Core教程:ASP.NET Core 程序部署到Windows系統(tǒng)

    ASP.NET Core教程:ASP.NET Core 程序部署到Windows系統(tǒng)

    本篇文章介紹如何將一個ASP.NET Core Web程序部署到Windows系統(tǒng)上。這里以ASP.NET Core WebApi為例進行講解。首先創(chuàng)建一個ASP.NET Core WebApi項目,使用默認的Values控制器,這里使用Visual Studio 2019創(chuàng)建一個ASP.NET Core 3.1d的WebApi項目。 創(chuàng)建新項目的時候選項ASP.NET Core Web應用程序,如下圖所

    2023年04月08日
    瀏覽(103)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包