广告位联系
返回顶部
分享到

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

asp.net 来源:互联网 作者:秩名 发布时间:2022-02-21 09:34:30 人浏览
摘要

前言: 在前面的文章,我们介绍了? ?使用功能开关控制路由访问??。 但其实我们使用了2个条件做的判断: 1 2 3 4 var isDebugEndpoint = context.Request.Path.Value.Contains(/test); var debugEndpoint

前言:

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

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

1

2

3

4

var isDebugEndpoint = context.Request.Path.Value.Contains("/test");

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

 

if (isDebugEndpoint && debugEndpoint)

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

1

2

3

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

 

if (debugEndpoint)

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

一、IFeatureFilter介绍

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

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

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

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

二、实现

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

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??:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

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);

             

    }

}

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

1

2

3

4

5

6

7

8

9

10

11

12

"FeatureManagement": {

    "ForbiddenDebugEndpoint": {

        "EnabledFor": [

        {

            "Name": "DebugFeatureFilter",

            "Parameters": {

                "DebugEndpoints": [ "/test" ]

            }

        }

        ]

    }

}

结论:

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


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 : https://blog.51cto.com/MyIO/5019911
相关文章
  • ASP.NET MVC使用Identity增删改查用户

    ASP.NET MVC使用Identity增删改查用户
    源码在这里:https://github.com/darrenji/UseIdentityCRUDUserInMVC,本地下载 在VS2013中创建一个MVC项目,用默认的无身份验证作为身份验证机制。 通过
  • WPF实现雷达扫描图的绘制介绍

    WPF实现雷达扫描图的绘制介绍
    实现一个雷达扫描图。 源代码在TK_King/雷达 (gitee.com) https://gitee.com/TK_King/radar,自行下载就好了 制作思路 绘制圆形(或者称之轮) 绘制分割
  • .Net Core之JWT授权介绍

    .Net Core之JWT授权介绍
    JSON Web令牌(JWT)是一个开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间安全地传输信息作为JSON对象。由于此信息
  • ASP.NET Core使用Middleware设置有条件允许访问路由

    ASP.NET Core使用Middleware设置有条件允许访问路由
    1.简介 有时,我们可能在Web API中包含一些具有调试功能的请求。比如我们上次的文章中为什么ASP.NETCore数据库连接串的值和appsettings.json配的
  • ASP.NET Core使用功能开关控制路由访问操作

    ASP.NET Core使用功能开关控制路由访问操作
    前言: 在前面的文章,我们介绍了使用Middleware有条件地允许访问路由(《ASP.NETCore使用Middleware设置有条件允许访问路由》)。 而对于一些
  • ASP.NET Core使用功能开关控制路由访问操作(续)

    ASP.NET Core使用功能开关控制路由访问操作(续)
    前言: 在前面的文章,我们介绍了? ?使用功能开关控制路由访问??。 但其实我们使用了2个条件做的判断: 1 2 3 4 var isDebugEndpoint = context.Re
  • 详解MediatR的使用
    环境: .NET 5 ASP.NET Core MVC (project) 1. MediatR MediatR .NET中的简单中介者模式实现,一种进程内消息传递机制(无其他外部依赖)。支持以同步或
  • .NET Core 3.0里新的JSON API介绍
    为什么需要新的 JSON API ? JSON.NET 大家都用过,老版本的 ASP.NET Core 也依赖于 JSON.NET 。 然而这个依赖就会引起一些版本问题:例如 ASP .NET
  • Net Core Web Api项目与在NginX下发布的方法
    前言 本文将介绍Net Core的一些基础知识和如何NginX下发布Net Core的WebApi项目。 测试环境 操作系统:windows 10 开发工具:visualstudio 2019 框架:
  • ASP.NET Core中的Http缓存使用
    Http响应缓存可减少客户端或代理对web服务器发出的请求数。响应缓存还减少了web服务器生成响应所需的工作量。响应缓存由Http请求中的he
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计