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

ASP.NET Core授权Handler统一获取路由与查询参数matchKey方法问询

解决方案

不需要手动拆分Request.Path字符串,ASP.NET Core 路由系统已经自动解析好了路径参数,你可以直接从HttpContext.Request.RouteValues中获取路由参数,同时可以兼容原有的查询参数传参方式,调整后的授权Handler代码如下:

protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, MatchRequirement requirement)
{
    if (context.Resource is HttpContext httpContext)
    {
        Guid matchKey;
        // 优先从路由参数中获取matchKey
        if (httpContext.Request.RouteValues.TryGetValue("matchKey", out var routeMatchKey) 
            && Guid.TryParse(routeMatchKey?.ToString(), out matchKey))
        {
            // 原有权限校验逻辑
            context.Succeed(requirement);
            return Task.CompletedTask;
        }
        // 路由中不存在时降级从查询参数获取,兼容旧版URL格式
        if (httpContext.Request.Query.TryGetValue("matchKey", out var queryMatchKey)
            && Guid.TryParse(queryMatchKey.ToString(), out matchKey))
        {
            // 原有权限校验逻辑
            context.Succeed(requirement);
            return Task.CompletedTask;
        }
    }
    // 未获取到有效matchKey默认校验失败
    context.Fail();
    return Task.CompletedTask;
}

原理解释

  • RouteValues是ASP.NET Core路由中间件解析完请求路径后自动填充的集合,所有路由模板中定义的参数都会自动存入该集合,无需手动处理路径拆分、编码转换等边缘场景,稳定性远高于自行解析路径。
  • 上述写法同时兼容路由传参和查询参数传参两种形式,不需要修改原有URL的使用逻辑。

内容的提问来源于stack exchange,提问作者Michael Esteves

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 07:54:02