You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ASP.NET Core中间件中跳过特定路由?

在ASP.NET Core中间件中根据路由值执行特定代码

下面是几种在中间件里仅当路由包含特定值时执行代码的实用方案:

1. 直接检查Request.Path(简单路由场景)

如果只是需要匹配路由路径中包含特定字符串(比如/admin前缀),可以直接读取HttpContext.Request.Path进行判断:

public async Task InvokeAsync(HttpContext context)
{
    // 检查路径是否包含"/admin"前缀
    if (context.Request.Path.StartsWithSegments("/admin"))
    {
        // 这里放你要执行的特定代码
        Console.WriteLine("当前路由包含/admin前缀,执行专属逻辑");
    }

    // 继续执行后续中间件
    await _next(context);
}

2. 通过RouteData获取路由参数(带参数的路由场景)

如果你的路由定义了参数(比如{controller}/{action}),可以通过RouteData获取具体的路由值来判断:

public async Task InvokeAsync(HttpContext context)
{
    var routeData = context.GetRouteData();
    if (routeData != null)
    {
        // 判断controller是否为"Admin"(忽略大小写)
        if (routeData.Values.TryGetValue("controller", out var controllerValue) && 
            controllerValue.ToString().Equals("Admin", StringComparison.OrdinalIgnoreCase))
        {
            // 执行特定代码
            Console.WriteLine("当前路由的Controller是Admin,执行对应逻辑");
        }
    }

    await _next(context);
}

3. 针对端点路由的匹配(ASP.NET Core 3.0+)

如果项目使用了端点路由(默认启用),可以通过GetEndpoint()获取端点信息,检查路由模板或元数据:

public async Task InvokeAsync(HttpContext context)
{
    var endpoint = context.GetEndpoint();
    if (endpoint != null)
    {
        // 获取路由模板并检查是否包含特定值
        var routePattern = endpoint.Metadata.GetMetadata<RoutePatternMetadata>()?.RoutePattern;
        if (routePattern != null && routePattern.RawText.Contains("admin"))
        {
            // 执行特定代码
            Console.WriteLine("当前端点路由包含admin,执行对应逻辑");
        }
    }

    await _next(context);
}

注意:如果是在中间件链中比较靠前的位置调用GetEndpoint(),可能会返回null(因为端点路由还没完成匹配),这种情况下建议把中间件放在app.UseRouting()之后、app.UseEndpoints()之前。

内容的提问来源于stack exchange,提问作者Marian Kosaniak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 15:00:53