【愚公系列】2022年03月 ASP.NET Core中间件-条件路由

本文涉及的产品
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
MSE Nacos/ZooKeeper 企业版试用,1600元额度,限量50份
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 【愚公系列】2022年03月 ASP.NET Core中间件-条件路由

前言

1. 条件路由简介

首先我们得了解什么是路由规则?假设有这样一个场景如下图所示:



上图中我们可以看到有两个机房分别是机房A、机房B,其中机房A只能访问到 Service A 和 Service B ,而机房B 只能访问到 Service C 和 Service D。要实现上面这种场景我们就需要用到所谓的路由规则。路由规则是在发起一次RPC调用前过滤目标服务器地址,而过滤后的地址列表,将作为消费端最终发起RPC调用的备选地址。在 Dubbo 中支持两种路由规则今天我们主要讨论条件路由。


条件路由:支持以接口服务或消费者应用为粒度配置路由规则。


2.使用场景

1.黑名单: 比如我们需要禁止某些服务消费者消费服务


host = 192.168.53.10,192.168.53.11

上面配置表示禁止192.168.53.10、192.168.53.11消费者访问服务提供者。


2.服务寄宿在应用上,只暴露一部分的机器,防止整个集群挂掉

host = 192.168.53.1*,192.168.53.2*

上面配置表示只能放192.168.53.1*、192.168.53.2 ip 地址开头的服务提供者。


3.读写分离:读取数据和写入数据操作分开


method = find*,list*,get*,is* => host = 192.168.53.10,192.168.53.11,192.168.53.12
method != find*,list*,get*,is* => host = 192.168.20.97,192.168.53.21

上面配置表示以find*,list*,get*,is*方法命名开始的方法只能访问192.168.53.10,192.168.53.11,192.168.53.12服务提供者,而不是find*,list*,get*,is*方法命名开始的方法只能访问192.168.20.97,192.168.53.21服务提供者。


4.提供者与消费者部署在同集群内,本机只访问本机的服务

host = $host

上面配置表示所有消费者只能访问集群内的服务。


二、ASP.NET Core中间件条件路由

普通实现方式


endpoints.MapGet("/test2/{key:alpha}", async context =>
{
    var key = context.Request.RouteValues["key"].ToString();
    foreach (var provider in Configuration.Providers.Reverse())
    {
        if (provider.TryGet(key, out string value))
        {
            await context.Response.WriteAsync(provider.ToString());
            await context.Response.WriteAsync("\r\n");
            await context.Response.WriteAsync(value);
            break;
        }
    }
});

但确定是会在生产环境中暴露它们,要防止暴露可以使用中间件。


1.中间件代码

public class DebugMiddleware : IMiddleware
{
    public async Task InvokeAsync(HttpContext context, RequestDelegate next)
    {
        var isDebugEndpoint = context.Request.Path.Value.Contains("/test");
        var debugKey = context.Request.Query["debugKey"].ToString();
        var debugKeyInConfig = "123456";//来自于配置
        if (isDebugEndpoint && debugKey!=debugKeyInConfig)
        {
            context.SetEndpoint(new Endpoint((context) =>
            {
                context.Response.StatusCode = StatusCodes.Status403Forbidden;
                return Task.CompletedTask;
            },
                        EndpointMetadataCollection.Empty,
                        "无权访问"));
        }
        await next(context);
    }
}

2.在管道中的使用

app.UseMiddleware<DebugMiddleware >()

相关文章
|
9月前
|
开发框架 .NET 开发者
简化 ASP.NET Core 依赖注入(DI)注册-Scrutor
Scrutor 是一个简化 ASP.NET Core 应用程序中依赖注入(DI)注册过程的开源库,支持自动扫描和注册服务。通过简单的配置,开发者可以轻松地从指定程序集中筛选、注册服务,并设置其生命周期,同时支持服务装饰等高级功能。适用于大型项目,提高代码的可维护性和简洁性。仓库地址:&lt;https://github.com/khellang/Scrutor&gt;
215 5
|
10月前
|
开发框架 .NET C#
在 ASP.NET Core 中创建 gRPC 客户端和服务器
本文介绍了如何使用 gRPC 框架搭建一个简单的“Hello World”示例。首先创建了一个名为 GrpcDemo 的解决方案,其中包含一个 gRPC 服务端项目 GrpcServer 和一个客户端项目 GrpcClient。服务端通过定义 `greeter.proto` 文件中的服务和消息类型,实现了一个简单的问候服务 `GreeterService`。客户端则通过 gRPC 客户端库连接到服务端并调用其 `SayHello` 方法,展示了 gRPC 在 C# 中的基本使用方法。
194 5
在 ASP.NET Core 中创建 gRPC 客户端和服务器
|
9月前
|
开发框架 算法 中间件
ASP.NET Core 中的速率限制中间件
在ASP.NET Core中,速率限制中间件用于控制客户端请求速率,防止服务器过载并提高安全性。通过`AddRateLimiter`注册服务,并配置不同策略如固定窗口、滑动窗口、令牌桶和并发限制。这些策略可在全局、控制器或动作级别应用,支持自定义响应处理。使用中间件`UseRateLimiter`启用限流功能,并可通过属性禁用特定控制器或动作的限流。这有助于有效保护API免受滥用和过载。 欢迎关注我的公众号:Net分享 (239字符)
175 1
|
9月前
|
开发框架 缓存 .NET
GraphQL 与 ASP.NET Core 集成:从入门到精通
本文详细介绍了如何在ASP.NET Core中集成GraphQL,包括安装必要的NuGet包、创建GraphQL Schema、配置GraphQL服务等步骤。同时,文章还探讨了常见问题及其解决方法,如处理复杂查询、错误处理、性能优化和实现认证授权等,旨在帮助开发者构建灵活且高效的API。
213 3
|
11月前
|
开发框架 JavaScript 前端开发
一个适用于 ASP.NET Core 的轻量级插件框架
一个适用于 ASP.NET Core 的轻量级插件框架
157 0
|
前端开发 中间件 .NET
asp.net core mvc 中间件之路由
asp.net core mvc 中间件之路由 路由中间件 首先看路由中间件的源码 先用httpContext实例化一个路由上下文,然后把中间件接收到的路由添加到路由上下文的路由集合 然后把路由上下文作为参数,调用IRouter.
1302 49
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
193 7
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
371 0
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
211 0
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
160 0

热门文章

最新文章