日韩性视频-久久久蜜桃-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)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久久久久久蜜桃 | 善良的少妇伦理bd中字 | 91蝌蚪视频在线观看 | 二区视频在线观看 | 老女人人体欣赏a√s | 亚洲综合婷婷久久 | 自拍偷拍另类 | 无码成人精品区在线观看 | 国产中文字幕免费 | 欧美福利在线观看 | 黑人巨大精品欧美一区二区 | 欧美精品成人一区二区在线观看 | 亚洲av无码一区二区乱孑伦as | 91丨九色丨蝌蚪丨对白 | 午夜啪视频| 五月婷婷开心 | 后进极品美女圆润翘臀 | 精品午夜一区二区三区 | 香蕉久久精品 | 长篇h版少妇沉沦交换 | 性一交一黄一片 | 国产不卡在线观看 | 宅男av在线 | 国产区在线视频 | 十大黄台在线观看 | 欧美亚洲日本 | 伊人91| 国产探花在线精品一区二区 | 久久久国产视频 | 欧洲精品久久一区二区 | 日本中文在线 | 国产真人无码作爱视频免费 | aa视频在线观看 | 精品国产传媒 | 在线观看欧美一区二区 | 日韩人妻精品一区二区三区视频 | 欧美日韩成人一区二区 | 欧美激情国产精品免费 | 67194午夜 | 青青草97国产精品免费观看 | 性欧美videossex精品 | 老头糟蹋新婚少妇系列小说 | 免费看女生隐私 | 国产精选网站 | 亚洲作爱网 | 国产三级精品视频 | 亚洲中文一区二区三区 | 久久久久免费视频 | 成人学院中文字幕 | 久久国产中文 | 亚洲视频免费在线 | 国产中文字幕久久 | 久艹在线观看视频 | 久久久久无码国产精品不卡 | 日韩精品www | 一区二区三区视频在线观看 | 久久精品国产亚洲AV无码麻豆 | 2021av| 久久不卡| 一级一片免费播放 | 久久中文字幕人妻 | 精品91视频 | 欧美日韩一区二区三区 | 少妇精品偷拍高潮白浆 | 蜜臀视频一区二区三区 | 日韩欧美高清dvd碟片 | 色黄网站 | 人人爱操| 日韩少妇中文字幕 | 人人插人人插 | 欧美成综合 | 91视频国产一区 | 国模在线视频 | 中文字幕一区二区三区门四区五区 | 手机av网址 | 麻豆精品久久 | 国产精品毛片久久 | 国产福利在线视频 | 成人av一区二区三区 | 激情网站在线观看 | 成人美女在线观看 | 精品国产一区二区在线观看 | 91丝袜美腿| 狠狠狠狠狠狠狠干 | 超碰在线中文字幕 | 特级西西444www大胆免费看 | 久草三级| 91操人| 人妻熟妇又伦精品视频a | 亚洲欧美综合在线观看 | 国产愉拍 | 五月婷网站 | 日韩黄色影院 | 亚洲精品资源在线 | 97国产一区 | 狠狠干一区 | 三级精品在线 | 欧美卡一卡二 | 亚洲一区二区三区中文字幕 |