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

.NET Core Web API授权中如何获取HotChocolate请求方法名称?

解决HotChocolate授权中获取请求方法/字段名称的问题

你遇到的核心问题是context.Resource实际是HotChocolate.Execution.Processing.MiddlewareContext实例,但直接读取时调用了默认的ToString(),所以只返回类型名称。要拿到目标字段/方法名,需要做类型转换并访问对应属性:

具体实现步骤

  • 首先确保项目已安装HotChocolate.Processing NuGet包,在授权处理类中添加命名空间引用:
    using HotChocolate.Execution.Processing;
    
  • 在HandleRequirementAsync方法中,先判断资源类型再转换,避免非GraphQL请求报错:
    protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, YourCustomRequirement requirement)
    {
        if (context.Resource is MiddlewareContext graphQLContext)
        {
            // 获取当前授权的GraphQL字段名称(对应你标记[Authorize("ArchiveList")]的目标方法/字段)
            var targetFieldName = graphQLContext.Selection.Field.Name;
            // 如需完整字段路径,可用:graphQLContext.Selection.Field.Path.ToString();
    
            // 这里加入你的授权逻辑,比如验证字段是否匹配
            if (targetFieldName.Equals("ArchiveList", StringComparison.OrdinalIgnoreCase))
            {
                context.Succeed(requirement);
            }
            else
            {
                context.Fail();
            }
        }
        else
        {
            // 处理非GraphQL请求场景(如果你的API同时包含REST接口)
            context.Fail();
        }
    
        return Task.CompletedTask;
    }
    
  • 补充说明:如果你的API同时存在REST接口,context.Resource会是HttpContext类型,此时可以通过((HttpContext)context.Resource).Request.Path或反射ActionDescriptor来获取方法名,但你当前场景是HotChocolate GraphQL,所以重点处理MiddlewareContext即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 01:53:09