ASP.NET Core使用功能开关控制路由访问操作

 更新时间:2022年02月20日 09:26:22   作者: IO My   
这篇文章主要介绍了ASP.NET Core使用功能开关控制路由访问操作,而对于一些试验性的功能,我们并不希望用密码去控制是否允许访问,而是想用一种开关的方式开放,下面文章我们就来试着实现这个功能,需要的小伙伴可以参考一下

前言:

在前面的文章,我们介绍了使用Middleware有条件地允许访问路由(《ASP.NET Core使用Middleware设置有条件允许访问路由》)。

而对于一些试验性的功能,我们并不希望用密码去控制是否允许访问,而是想用一种开关的方式开放。

1.功能开关

功能开关(Feature flags)就是这样一种部署技术,有助于提高应用程序的灵活性。

使用功能开关,你可以将新功能部署到生产环境中,但限制其可用性。

通过使用开关,你可以为控制是否激活一项新功能,而无需重新启动应用程序或部署新代码。

它们将新功能的发布与代码部署分离。

3.实现

首先,我们需要引用nugetMicrosoft.FeatureManagement.AspNetCore

然后,修改Startup.cs代码:

public void ConfigureServices(IServiceCollection services)
{
    ...
    services.AddFeatureManagement();
    ...
}

接着,增加一个配置:

"FeatureManagement": 
    {
        "ForbiddenDebugEndpoint": false
    }

3.使用

修改我们上次实现的DebugMiddleware

public class DebugMiddleware : IMiddleware
{
    private readonly IFeatureManager _featureManager;

    public DebugMiddleware(IFeatureManager featureManager)
    {
        _featureManager = featureManager;
    }
    public async Task InvokeAsync(HttpContext context, RequestDelegate next)
    {
        var isDebugEndpoint = context.Request.Path.Value.Contains("/test");
        var debugEndpoint = await _featureManager.IsEnabledAsync("ForbiddenDebugEndpoint");

        if (isDebugEndpoint && debugEndpoint)
        {
            context.SetEndpoint(new Endpoint((context) =>
            {
                context.Response.StatusCode = StatusCodes.Status403Forbidden;
                return Task.CompletedTask;
            },
                        EndpointMetadataCollection.Empty,
                        "无权访问"));
        }

        await next(context);
            
    }
}

关键就是这句话,我们使用了功能开关:

var debugEndpoint = await _featureManager.IsEnabledAsync("ForbiddenDebugEndpoint");

结论:

运行后我们发现,只需修改配置,无需重启程序,我们就可以控制是否可以访问路由了:

到此这篇关于ASP.NET Core使用功能开关控制路由访问操作的文章就介绍到这了,更多相关ASP.NET Core使用功能开关控制路由访问内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • asp.net 获取数据库连接字符串

    asp.net 获取数据库连接字符串

    本文主要介绍了asp.net获取数据库连接字符串的具体实现代码,具有一定参考价值,需要的朋友可以看下
    2016-12-12
  • .NET6新特新 struct优化

    .NET6新特新 struct优化

    这篇文章主要给大家分享的是 NET6新特新 struct优化,在.NET6中针对Struct做了一些优化,下面我们就通过一些案例来看一下.NET6中针对Struct的优化,需要的朋友可以参考一下,希望对大家有所帮助
    2021-11-11
  • 水晶易表调用C#的WebService,返回数据集合的应用分析

    水晶易表调用C#的WebService,返回数据集合的应用分析

    本篇文章介绍了,水晶易表调用C#的WebService,返回数据集合的应用分析。需要的朋友参考下
    2013-04-04
  • .NET新能源汽车锂电池检测程序UI挂死问题分析

    .NET新能源汽车锂电池检测程序UI挂死问题分析

    这篇文章主要为大家介绍了.NET新能源汽车锂电池检测程序UI挂死问题分析 ,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • 在NET Core 中获取 CPU 使用率

    在NET Core 中获取 CPU 使用率

    这篇文章我们分享一种如何在 .NETCore 中获取 CPU使用率的方法, 它所报告的这个值和 任务管理器 中报告的 CPU 使用值 差不多是一致的,下面来看看文中的具体详细介绍吧
    2022-01-01
  • DataGridView控件详细介绍

    DataGridView控件详细介绍

    DataGridView是用于Windows Froms 2.0的新网格控件。它可以取代先前版本中DataGrid控件,它易于使用并高度可定制,支持很多我们的用户需要的特性
    2012-11-11
  • ASP.NET webUploader上传大视频文件相关web.config配置

    ASP.NET webUploader上传大视频文件相关web.config配置

    本文主要介绍了webUploader上传大视频文件相关web.config的配置。具有一定的参考价值,下面跟着小编一起来看下吧
    2017-01-01
  • ASP.NET Core如何注入多个服务实现类

    ASP.NET Core如何注入多个服务实现类

    这篇文章主要介绍了ASP.NET Core如何注入多个服务实现类的相关资料,需要的朋友可以参考下面文章的具体内容
    2021-09-09
  • .NET Core 中对象池 Object Pool的使用

    .NET Core 中对象池 Object Pool的使用

    这篇文章主要介绍了 .NET Core 中对象池 Object Pool的使用,对象池简单来说就是一种为对象提供可复用能力的软件设计思路,对象池最常用的场景是游戏设计,因为在游戏中大量存在着可复用的对象,源源不断的子弹出现并不是循环再生的,下面一起进入文章了解具体内容吧
    2021-11-11
  • ASP.NET Core  依赖注入框架的使用

    ASP.NET Core 依赖注入框架的使用

    还记得上篇文章中最后提及到,假如服务越来越多怎么处理呢,本篇文章将会带来解决办法, ASP.NET Core 依赖注入框架的相关资料,需要的小伙伴可以参考下面文章的具体内容
    2021-10-10

最新评论