为啥我在尝试从 C# 处理程序发布 GraphQL 查询时收到错误请求?

Posted

技术标签:

【中文标题】为啥我在尝试从 C# 处理程序发布 GraphQL 查询时收到错误请求?【英文标题】:Why am I getting Bad Request trying to POST a GraphQL query from a C# handler?为什么我在尝试从 C# 处理程序发布 GraphQL 查询时收到错误请求? 【发布时间】:2022-01-17 23:32:21 【问题描述】:

我想使用 Web 服务或处理程序将突变发送到 GraphQL API。我有 GraphQL 代码在 Postman 和一个控制台应用程序中工作。但是每当我在服务或处理程序中尝试类似的代码时,我所能得到的只是一个 400 错误请求。目前正在尝试使用 HttpTaskAsyncHandler:

public class AsyncHandler : HttpTaskAsyncHandler 

    public override async Task ProcessRequestAsync (HttpContext context) 
        context.Response.ContentType = "text/plain";
        string result = await GoSC();
        context.Response.Write(result);
    

    public async Task<string> GoSC()
    
        // Define the cancellation token.
        CancellationTokenSource source = new CancellationTokenSource();
        CancellationToken cancellationToken = source.Token;

        HttpClient client = new HttpClient();
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
        client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "*******");
        client.DefaultRequestHeaders.Add("User-Agent", "MyApp");

        string uri = "https://theAPI.com/graphql";

        using (var request = new HttpRequestMessage(HttpMethod.Post, uri))
        
            var queryObject = new
            
                query = @"query querycurrentOrgId"
            ;            

            using (var stringContent = new StringContent(
                                            JsonConvert.SerializeObject(queryObject),
                                            System.Text.Encoding.UTF8,
                                            "application/json"))
            
                request.Content = stringContent;

                using (var response = await client
                    .SendAsync(request,
                            HttpCompletionOption.ResponseContentRead,
                            cancellationToken)
                    .ConfigureAwait(false))
                
                    response.EnsureSuccessStatusCode();
                    //string resString = response.StatusCode.ToString();
                    string resString = await response.Content.ReadAsStringAsync();
                    //string resString = await response.Content
                    return resString;
                
            
        
    

我已经尝试了从直接字符串到序列化 Json 的所有 HttpRequestMessage 内容。总是错误的请求。 任何智慧之言将不胜感激! 杰瑞

【问题讨论】:

【参考方案1】:

原来我们在 Web 服务器上运行了一个 http 到 https 的重定向,它以某种方式干扰了 API。需要将处理程序移到我自己的电脑上才能弄清楚。

【讨论】:

以上是关于为啥我在尝试从 C# 处理程序发布 GraphQL 查询时收到错误请求?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 GraphQL 查询返回 null?

为啥 GraphQL 查询返回 null?

为啥 GraphQL 查询返回 null?

为啥 GraphQL 查询返回 null?

如何从 Java 应用程序调用 GraphQL 端点 [重复]

为啥我在尝试使用 Visual Studio Analyzer 时遇到错误?