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

 更新时间:2022年02月20日 09:36:18   作者:My IO  
这篇文章主要介绍了ASP.NET Core使用功能开关控制路由访问操作的(续),上一篇文章我们已经介绍过一部份该相关内容,​​在本文,我们可以判断当前路由地址是否为调试地址,让评估返回真,需要的小伙伴可以参考一下

前言:

前面的文章,我们介绍了​ ​使用功能开关控制路由访问​​。

但其实我们使用了2个条件做的判断:

var isDebugEndpoint = context.Request.Path.Value.Contains("/test");
var debugEndpoint = await _featureManager.IsEnabledAsync("ForbiddenDebugEndpoint");

if (isDebugEndpoint && debugEndpoint)

如果仅用功能开关来控制:

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

if (debugEndpoint)

这样是不是更符合功能开关的含义呢!

一、IFeatureFilter介绍

IFeatureFilter(功能过滤器)可用于确定是否满足某些条件以启用一项功能。

功能过滤器可以自由使用任何可用的标准,例如流程状态或请求内容。

可以为给定功能注册功能过滤器,如果任何特征过滤器评估为真,该特征将被考虑启用。

​​在本文,我们可以判断当前路由地址是否为调试地址,让评估返回真。​​

二、实现

自定义功能过滤器实现代码如下:

public class DebugFeatureSettings
{
    public string[] DebugEndpoints { get; set; }
}

[FilterAlias("DebugFeatureFilter")]
public class DebugFeatureFilter : IFeatureFilter
{
    private readonly IHttpContextAccessor _httpContextAccessor;
    public DebugFeatureFilter(IHttpContextAccessor httpContextAccessor)
    {
        _httpContextAccessor = httpContextAccessor;
    }
    public Task<bool> EvaluateAsync(FeatureFilterEvaluationContext context)
    {
        var settings = context.Parameters.Get<DebugFeatureSettings>();
        foreach (var endPoint in settings.DebugEndpoints)
        {
            var isDebugEndpoint = _httpContextAccessor.HttpContext.Request.Path.Value.Contains(endPoint);
            return Task.FromResult(isDebugEndpoint);
        }
        return Task.FromResult(false);
    }
}

我们注入了​​IHttpContextAccessor​​​,用于获取当前请求上下文,然后判断当前路由地址是否包含​​DebugEndpoints​​配置的值。

三、使用

修改我们上次实现的​​DebugMiddleware​​:

public class DebugMiddleware : IMiddleware
{
    private readonly IFeatureManager _featureManager;

    public DebugMiddleware(IFeatureManager featureManager)
    {
        _featureManager = featureManager;
    }
    public async Task InvokeAsync(HttpContext context, RequestDelegate next)
    {
        var debugEndpoint = await _featureManager.IsEnabledAsync("ForbiddenDebugEndpoint");

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

        await next(context);
            
    }
}

然后将配置修改为如下形式:

"FeatureManagement": {
    "ForbiddenDebugEndpoint": {
        "EnabledFor": [
        {
            "Name": "DebugFeatureFilter",
            "Parameters": {
                "DebugEndpoints": [ "/test" ]
            }
        }
        ]
    }
}

结论:

运行后我们发现,只有符合功能开关设置的路由地址才会被限制访问:

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

相关文章

  • ASP.NET Core使用Middleware设置有条件允许访问路由

    ASP.NET Core使用Middleware设置有条件允许访问路由

    这篇文章主要介绍了ASP.NET Core使用Middleware设置有条件允许访问路由,文章围绕主题相关资料展开学习内容,需要的小伙伴可以参考一下,希望对你的学习有所帮助
    2022-02-02
  • .NET提取 Thread 中返回值详情

    .NET提取 Thread 中返回值详情

    这篇文章主要介绍了.NET提取 Thread 中返回值详情,关于如何获取 Thread 中的返回值,不同的版本有不同的解决方案。需要的朋友可以参考一下
    2022-01-01
  • .Net 7函数Ctor与CCtor使用及区别详解

    .Net 7函数Ctor与CCtor使用及区别详解

    这篇文章主要为大家介绍了.Net 7函数Ctor与CCtor使用及区别详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • .net程序开发IOC控制反转和DI依赖注入详解

    .net程序开发IOC控制反转和DI依赖注入详解

    这篇文章主要为大家介绍了.net程序开发IOC控制反转和DI依赖注入示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • 设计windows phone页面主题

    设计windows phone页面主题

    这篇文章主要介绍了设计windows phone页面主题,需要的朋友可以参考下
    2015-07-07
  • 从零开始学ASP.NET-基础篇

    从零开始学ASP.NET-基础篇

    从零开始学ASP.NET-基础篇...
    2006-07-07
  • ASP.NET学习中常见错误总结归纳

    ASP.NET学习中常见错误总结归纳

    这篇文章主要介绍了asp.net学习过程中碰到的常见错误的解决方法,通读本篇对大家的学习或工作具有一定的价值,需要的朋友可以参考下
    2021-09-09
  • 在NET Core 中获取 CPU 使用率

    在NET Core 中获取 CPU 使用率

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

    ASP.NET Core MVC 依赖注入View与Controller

    本文重点给大家介绍的是ASP.NET Core MVC 之依赖注入 View 和ASP.NET Core MVC 之依赖注入 Controller的相关资料,需要的小伙伴可以参考下面文章具体内容
    2021-09-09
  • .NET6新特性之 隐式命名空间引用

    .NET6新特性之 隐式命名空间引用

    本文给大家分享的是 .NET6特新 隐式命名空间引用,如果我们要在新加一个命名空间的引用,可以在项目文件中配置增加<Using Include="命名空间"/>,如果需要移除一个命名空间可以这么做<Using Remove="命名空间"/>,下面来看看文章详细介绍内容吧,需要的朋友可以参考一下
    2021-11-11

最新评论