iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > ASP.NET >ASP.NET Core使用功能开关控制路由访问操作(续)
  • 237
分享到

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

2024-04-02 19:04:59 237人浏览 独家记忆
摘要

目录前言:一、IFeatureFilter介绍二、实现三、使用结论:前言: 在前面的文章,我们介绍了​ ​使用功能开关控制路由访问​​。 但其实我们使用了2个条件做的判断: var

前言:

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

但其实我们使用了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使用功能开关控制路由访问内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

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

本文链接: https://www.lsjlt.com/news/139782.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • ASP.NET Core使用功能开关控制路由访问操作(续)
    目录前言:一、IFeatureFilter介绍二、实现三、使用结论:前言: 在前面的文章,我们介绍了​ ​使用功能开关控制路由访问​​。 但其实我们使用了2个条件做的判断: var ...
    99+
    2022-11-13
  • ASP.NET Core使用功能开关控制路由访问操作
    目录前言:1.功能开关3.实现3.使用结论:前言: 在前面的文章,我们介绍了使用Middleware有条件地允许访问路由(《ASP.NET Core使用Middleware...
    99+
    2022-11-13
  • ASP.NET Core中如何使用功能开关控制路由访问
    本篇内容介绍了“ASP.NET Core中如何使用功能开关控制路由访问”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!其实我们使用了...
    99+
    2023-06-29
  • ASP.NET Core使用功能开关控制路由访问的方法
    今天小编给大家分享一下ASP.NET Core使用功能开关控制路由访问的方法的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作