日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

.net core 不启用 https_.NET 应用如何优雅的做功能开关(Feature Flag)

發(fā)布時間:2023/12/31 asp.net 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .net core 不启用 https_.NET 应用如何优雅的做功能开关(Feature Flag) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

點擊上方藍字關(guān)注“汪宇杰博客”

導(dǎo)語

曾經(jīng),我們要在應(yīng)用程序里做功能開關(guān),就避免不了在配置文件里加上一堆 bool 類型的配置項,然后在代碼里用 if else 去判斷。盡管這種做法是可行的,但我們現(xiàn)在有辦法讓代碼更加整潔,避免成堆的 if else 出現(xiàn)。

.NET 功能管理庫

微軟為了解決常見的功能開關(guān)問題場景,推出了 .NET Core Feature Management 庫。它由 Azure 團隊發(fā)布,并屬于 Azure 文檔的一部分,但我發(fā)現(xiàn)就算在沒有 Azure 環(huán)境的情況下,它依然可以正常全功能運行

Azure 在此的作用僅僅是用 Azure App Configuration 作為功能開關(guān)的數(shù)據(jù)源,而我們完全可以用本地的 appsettings.json 來替代,避免了購買 Azure 從而落魄街頭的風(fēng)險

安裝功能管理庫

以我的博客系統(tǒng)為例,我的應(yīng)用是 ASP.NET MVC / Web API類型的,我需要添加的包為?Microsoft.FeatureManagement.AspNetCore。如果你的應(yīng)用并非ASP.NET,可以只添加?Microsoft.FeatureManagement

然后注冊到 DI 里去

using Microsoft.FeatureManagement;

public class Startup

{

? ? public void ConfigureServices(IServiceCollection services)

? ? {

? ? ? ? services.AddFeatureManagement();

? ? }

}

添加功能開關(guān)配置項

以我的博客系統(tǒng)為例,原先我在 AppSettings section 中有兩個bool類型的配置項,現(xiàn)在就可以遷移到名為?FeatureManagement 的新 section 里。

相對應(yīng)的,在 C# 代碼里,去掉原來的項,添加一個新的枚舉類型,值的名稱對應(yīng)配置項的名稱。

這個枚舉類型不是必須的,但非常建議創(chuàng)建枚舉,這是為了保證在使用功能開關(guān)的時候有強類型支持,避免用string導(dǎo)致哪里名字沒改對造成996。

使用功能開關(guān)

我們只需從DI里拿到 IFeatureManager 的實例,即可判斷功能開關(guān)是否打開。例如:

IFeatureManager featureManager;

...

if (await featureManager.IsEnabledAsync(nameof(MyFeatureFlags.FeatureA)))

{

? ? // 執(zhí)行代碼

}

在 ASP.NET 項目里,最方便的就是通過構(gòu)造函數(shù)獲取?IFeatureManager 的實例

public class HomeController : Controller

{

? ? private readonly IFeatureManager _featureManager;

? ? public HomeController(IFeatureManager featureManager)

? ? {

? ? ? ? _featureManager = featureManager;

? ? }

}

那么問題來了,說好的少寫 if else 呢?這個 IsEnabledAsync 不還是得寫 if?

其實 Microsoft.FeatureManagement.AspNetCore 這個包包括了 MVC / Web API 項目所需要用到的許多助手功能。可以讓我們避免大量的 if else。

在 Controller 級別添加功能開關(guān)

還是以我博客系統(tǒng)為例,我的 GraphController 只有在 EnableWebApi 開關(guān)打開的時候才響應(yīng)用戶請求,那么本來的 if else 判斷現(xiàn)在就可以:

[FeatureGate(FeatureFlags.EnableWebApi)]

// ...?

public class GraphController : ControllerBase?

{

// ...

}

是不是很爽?

在 Action 級別添加功能開關(guān)

[FeatureGate(FeatureFlags.EnableAudit)]

public async Task ClearAuditLogs()

{

? ? // ...

}

在 View 上添加功能開關(guān)

先在?_ViewImports.cshtml 中添加 taghelper 聲明。

@addTagHelper *, Microsoft.FeatureManagement.AspNetCore

然后就可以用? 標(biāo)簽選擇性的渲染 HTML 內(nèi)容了!

? ?

This can only be seen if 'FeatureA' is enabled.

對于feature關(guān)閉才顯示的內(nèi)容,加個 negate 就好了

? ?

This will be shown if 'FeatureA' is disabled.

還可用? All, Any 屬性控制多個功能開關(guān)的顯示處理。All 表示列出的功能得全啟用才執(zhí)行,Any 表示列出的功能里任意一個為 true 就可以執(zhí)行。

This can only be seen if 'FeatureA' and 'FeatureB' are enabled.

This can be seen if 'FeatureA', 'FeatureB', or both are enabled.

根據(jù)功能開關(guān)添加 Filter

使用?AddForFeature() 拓展方法

using Microsoft.FeatureManagement.FeatureFilters;

IConfiguration Configuration { get; set;}

public void ConfigureServices(IServiceCollection services)

{

? ? services.AddMvc(options => {

? ? ? ? options.Filters.AddForFeature(nameof(MyFeatureFlags.FeatureA));

? ? });

}

根據(jù)功能開關(guān)添加 Middleware

app.UseMiddlewareForFeature(nameof(MyFeatureFlags.FeatureA));

或者

app.UseForFeature(featureName, appBuilder => {

? ? appBuilder.UseMiddleware();

});

小提示

功能開關(guān)的配置值更改,無需重啟應(yīng)用程序,修改配置文件后可以熱更新,立即生效!

另外,如果你足夠有錢,也推薦試試 Azure App Configuration,將你的應(yīng)用功能開關(guān)放在云端統(tǒng)一管理,可以非常方便的針對用戶群體配置 A/B,藍綠測試哦!

參考文檔:https://docs.microsoft.com/en-us/azure/azure-app-configuration/use-feature-flags-dotnet-core?WT.mc_id=AZ-MVP-5002809

汪宇杰博客

Azure | .NET |?微軟 MVP

無廣告,不賣課,做純粹的技術(shù)公眾號

喜歡本篇內(nèi)容請點個在看

總結(jié)

以上是生活随笔為你收集整理的.net core 不启用 https_.NET 应用如何优雅的做功能开关(Feature Flag)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。