如何为GraphQL Hot Chocolate的QueryRequestBuilder添加请求头?
在Hot Chocolate中使用QueryRequestBuilder添加请求头
你之前的错误在于使用AddProperty方法——这个方法是用来添加GraphQL请求的自定义附加属性,而非HTTP请求头,所以授权逻辑无法识别你传入的Authorization信息,导致返回403。
下面是两种正确添加请求头的方式:
方式一:使用AddHeader方法直接添加
IReadOnlyQueryRequest request = QueryRequestBuilder.New() .SetQuery("query{ clients(where:{state:{eq:ACTIVE}}) { items{ id code date name email desc state created modify } pageInfo{ hasNextPage hasPreviousPage } totalCount } }") .AddHeader("environment", "test") // 注意拼写修正:environment(原代码拼写为enviroment) .AddHeader("Authorization", "Bearer token_value") .Create(); IExecutionResult result = await executor.ExecuteAsync(request);
方式二:通过字典批量设置请求头
如果需要添加多个请求头,也可以先构建字典再传入:
var requestHeaders = new Dictionary<string, string> { {"environment", "test"}, {"Authorization", "Bearer token_value"} }; IReadOnlyQueryRequest request = QueryRequestBuilder.New() .SetQuery("query{ clients(where:{state:{eq:ACTIVE}}) { items{ id code date name email desc state created modify } pageInfo{ hasNextPage hasPreviousPage } totalCount } }") .SetHeaders(requestHeaders) .Create(); IExecutionResult result = await executor.ExecuteAsync(request);
额外注意事项
- 检查请求头的拼写正确性,比如原代码中的
enviroment应为environment,拼写错误会导致头信息无法被识别 - 确保Authorization头格式正确:
Bearer与token值之间必须有空格,且token是有效的JWT令牌 - 若使用较旧版本的Hot Chocolate,可能需要通过
Properties字典传递头信息,但优先推荐使用上述官方支持的AddHeader/SetHeaders方法
内容的提问来源于stack exchange,提问作者Allan
相关产品推荐
相关产品推荐

