.NET Core 中的 功能管理 (Feature Management) 包可用于实现 功能开关,什么意思呢?就是可以通过 功能开关 特性动态的改变应用程序的行为而不需要改变任何的业务逻辑代码,听起来是不是挺有意思,本篇我们就来讨论如何使用这个包。

安装 Feature Management 包

要想使用 功能管理,需要通过 NuGet 安装 Microsoft.FeatureManagement.AspNetCore,可通过 Visual Studio 2019 下的 NuGet Package Manager 可视化管理界面 或者 通过 .NET CLI 命令行工具输入如下命令。


dotnet add package Microsoft.FeatureManagement.AspNetCore

在 ASP.NET Core 中添加

为了能够在项目中用上 功能管理,需要在 Startup.ConfigureServices 方法下进行 service 注入,如下代码所示:

public class Startup{// This method gets called by the runtime. Use this method to add services to the container.public void ConfigureServices(IServiceCollection services){services.AddControllersWithViews();services.AddFeatureManagement();}}

有一点要注意:功能管理 中的 功能开关 读取的值来自于 .NET Core 中的配置文件,如果你想让 功能开关 的值来源于 Configuration 文件的不同节点,必须在 service 注册时单独指定一下,如下代码所示:

public void ConfigureServices(IServiceCollection services){services.AddFeatureManagement(options =>{options.UseConfiguration(Configuration.GetSection("IDGFeatureFlags"));});}

在 controller 中使用 功能管理

为了能够在 Controller 中用上 功能管理(feature management),需要通过依赖注入的方式将其注入到 Controller 中,如下代码所示:


public class HomeController : Controller
{private readonly ILogger<HomeController> _logger;private readonly IFeatureManager _featureManager;public HomeController(ILogger<HomeController> logger, IFeatureManagerSnapshot featureManager){_logger = logger;_featureManager = featureManager;}
}

接下来在 appsettings.json 配置文件中定义一个名为 FeatureManagement 节点,文件内容参考如下:


{"Logging": {"LogLevel": {"Default": "Information","Microsoft": "Warning","Microsoft.Hosting.Lifetime": "Information"}},"FeatureManagement": {"DbLogger": "true"},"AllowedHosts": "*"
}

使用 FeatureGate特性 管控 功能开关

可以使用 FeatureGate 特性来 管控 Action 方法是否可以被执行,什么意思呢?先看如下代码。

public class HomeController : Controller{private readonly ILogger<HomeController> _logger;private readonly IFeatureManager _featureManager;public HomeController(ILogger<HomeController> logger, IFeatureManagerSnapshot featureManager){_logger = logger;_featureManager = featureManager;}[FeatureGate("DbLogger")]public IActionResult Index(){return View();}}

可以看到, Index 方法标注了 [FeatureGate("DbLogger")] 特性,这里面的 DbLogger 就是 appsettings.json 中的 DbLogger 节点的值,当值为 True 时,这个 Index 方法是可以被 HttpGet 所请求的,如下图:

当值为 False 时,这个 Index 方法将会抛出 404 错误,是不是很有意思哈,如下图所示:


{"Logging": {"LogLevel": {"Default": "Information","Microsoft": "Warning","Microsoft.Hosting.Lifetime": "Information"}},"FeatureManagement": {"DbLogger": "false"},"AllowedHosts": "*"
}

用法就是这么一个用法,可以看到 .NET Core 对 功能管理 提供了开箱即用的支持, 这确实是一个非常实用的特性,更多关于该 知识点 的介绍,可参考官网:https://docs.microsoft.com/en-us/azure/azure-app-configuration/use-feature-flags-dotnet-core

译文链接:https://www.infoworld.com/article/3481516/how-to-use-feature-flags-in-aspnet-core.html

如何在 ASP.NET Core 中 使用 功能开关相关推荐

  1. 如何在 ASP.Net Core 中使用 Serilog

    记录日志的一个作用就是方便对应用程序进行跟踪和排错调查,在实际应用上都是引入 日志框架,但如果你的 日志文件 包含非结构化的数据,那么查询起来将是一个噩梦,所以需要在记录日志的时候采用结构化方式. 将 ...

  2. 如何在 ASP.NET Core 中使用 URL Rewriting 中间件

    URL rewriting 是根据预先配置好的一组规则去修改 request url,值得注意的是:URL Rewriting 的重写功能和 url 重定向 是两个概念,本篇我们就来讨论下如何在 AS ...

  3. 如何在 ASP.NET Core 中使用 Quartz.NET 执行任务调度

    当我们在web开发中,常常会遇到这么一个需求,在后台执行某一项具体的任务,具体的说就是这些任务必须在后台定时执行. Quartz.NET 是一个开源的 JAVA 移植版,它有着悠久的历史并且提供了强大 ...

  4. 如何在 Asp.Net Core 中对请求进行限流

    译文链接:https://www.infoworld.com/article/3442946/how-to-implement-rate-limiting-in-aspnet-core.html 在应 ...

  5. 如何在ASP.NET Core中自定义Azure Storage File Provider

    主题:如何在ASP.NET Core中自定义Azure Storage File Provider 作者: Lamond Lu 地址:  https://www.cnblogs.com/lwqlun/ ...

  6. asp绑定gridview属性_如何在ASP.NET Core中自定义Azure Storage File Provider

    主题:如何在ASP.NET Core中自定义Azure Storage File Provider 作者: Lamond Lu 地址:  https://www.cnblogs.com/lwqlun/ ...

  7. 如何在 ASP.NET Core 中使用 HttpClientFactory ?

    ASP.Net Core 是一个开源的,跨平台的,轻量级模块化框架,可用它来构建高性能的Web程序,这篇文章我们将会讨论如何在 ASP.Net Core 中使用 HttpClientFactory. ...

  8. 如何在 ASP.Net Core 中使用 Autofac

    依赖注入可以有效的实现对象之间的 松耦合 并能够实现代码的可测试和可维护性,ASP.Net Core 提供了一个极简版的容器实现对 依赖注入 的原生支持,然而内置的依赖注入容器相比成熟的 依赖注入容器 ...

  9. 如何在 ASP.Net Core 中使用 Lamar

    ASP.Net Core 自带了一个极简的 开箱即用 的依赖注入容器,实际上,你还可以使用第三方的 依赖注入容器 来替代它,依赖注入是一种设计模式,它能够有效的实现对象之间的解耦并有利于提高单元测试和 ...

最新文章

  1. ASP.NET文件上传
  2. 【Android 安装包优化】移除无用资源 ( 自动移除无用资源 | 直接引用资源 | 动态获取资源 id | Lint 检查资源 )
  3. 关于提高代码复用性的几个知识点的回顾
  4. Javascript实现的左右滑动菜单
  5. matlab桥梁受力计算公式,matlab桥梁计算
  6. access百度翻译 get_Asp.NET调用百度翻译
  7. 风湿病年鉴 | scRNA-seq研究揭示骨关节炎患者的半月板退变新机制
  8. 【西安石油大学主办|IEEE CPS出版】2020智能控制、测量与信号处理国际学术会议诚邀您投稿参会!...
  9. 程序语言python如何抓取信息_python中系统信息获取psutil使用详解
  10. OC 中property属性详解(assign , retain , copy , strong,weak,readonly , readwrite , atomic , nonatomic)
  11. 如何使用工资短信生成器
  12. matlab图像粘连计数,Matlab图像处理在水稻谷粒计数中的应用
  13. html 语言包,语言包编辑
  14. 行为金融(二):行为金融的心理学基础
  15. Cisco路由器之IPSec 虚拟专用网(内附配置案例)
  16. hdu 1166 排兵布阵
  17. Spring Data JDBC、引用和聚合
  18. 小米红米6Pro线刷兼救砖_解账户锁_纯净刷机包_教程
  19. 3D游戏建模教程:Maya如何隐藏灯光
  20. Git 工作中怎么用?

热门文章

  1. Python_XlrdXlwt
  2. IDEA开发工具的学习
  3. Redis安装[Windows]
  4. 传智168期JavaEE struts2杜宏 day32~day33(2017年2月15日23:27:09)
  5. POJ-3635 Full Tank? 变形最短路
  6. 变动翻屏展示图片效果
  7. [PHP] 多表外连接性能测试及优化
  8. Spring Cloud Gateway 原生支持接口限流该怎么玩
  9. SDUT OJ -2892 A
  10. SSIS package 更新 variable