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

主站蜘蛛池模板: 国产亚洲欧美视频 | 亚洲乱码av | 国产精品嫩 | 免费萌白酱国产一区二区三区 | 亚洲区成人 | 白洁av | 一区二区欧美日韩 | 国产欧美一区二区三区视频在线观看 | 夜夜骑夜夜| 黑人一区 | 亚洲欧美中文字幕5发布 | 天堂网资源| 嫩模一区二区三区 | av制服丝袜 | 日韩福利视频在线观看 | 国产成人免费电影 | 免费看国产一级片 | 97潮色| 热久久精 | 91尤物视频 | 99ri国产精品 | 国产乱了高清露脸对白 | 亚洲无人区码一码二码三码 | 国产视频一区二区三区四区 | 国产视频在线观看一区二区 | 日韩av成人在线 | 日韩成人免费在线 | 女生鸡鸡软件 | 免费观看成年人视频 | 精品在线视频一区二区三区 | 亚洲av成人无码一区二区三区在线观看 | 亚洲香蕉网站 | 欧美精品二区三区四区免费看视频 | www成人网| 少妇又色又紧又黄又刺激免费 | 五月香蕉网 | 日韩二区| av在线电影院 | 色综合久久综合 | 看av免费毛片手机播放 | 国产精品久久久久久久久久久久久久久久 | 波多野结衣在线免费视频 | 亚洲啪啪av | 337p粉嫩大胆噜噜噜亚瑟影院 | 2019年中文字幕 | 在线欧美 | 人妻与黑人一区二区三区 | 国产视频一区二区三区在线播放 | 亚洲精品无码一区二区 | av一道本 | 精品无码人妻一区二区免费蜜桃 | 在线观看黄色网页 | 懂色一区二区 | 久久免费看少妇高潮 | 国产热99 | 成人精品免费在线观看 | 亚洲黄色网络 | 日日夜夜狠 | 中文字幕国产一区 | 久久亚洲综合国产精品99麻豆精品福利 | 国产精品系列在线播放 | 亚洲福利精品 | 欧美一区二区三区黄片 | 欧美黑人狂野猛交老妇 | 精品国产青草久久久久96 | 亚洲一区二区三区黄色 | 国产一级做a爰片在线看免费 | 18成人免费观看网站下载 | 桃色视频| 网站久久| 毛片在线免费观看视频 | 国产一级视频在线 | 婷婷久久久久久 | 女裸全身无奶罩内裤内衣内裤 | 久久爱伊人 | 波多野结衣 久久 | 成人午夜精品视频 | 成人免费视屏 | 欧美午夜精品久久久久久人妖 | 天堂av一区二区 | 老司机激情影院 | 男生尿隔着内裤呲出来视频 | 久久人妻无码aⅴ毛片a片app | 亚洲国产影视 | 精品国产乱子伦一区二区 | 中文字幕在线看人 | 狠狠躁夜夜躁人人爽天天高潮 | 日韩精品黄| 91亚洲国产成人精品一区 | 啪啪小视频 | 欧美一级黄 | 一本一道久久a久久精品蜜桃 | 又黄又爽的网站 | 女人扒开腿让男人桶爽 | 日本高清视频免费观看 | 99国产在线 | 青青草老司机 | 毛片看看| 麻豆91视频 |