C# 尝试从httprequest获取数据时出错

C# 尝试从httprequest获取数据时出错,c#,json,httprequest,C#,Json,Httprequest,我正在尝试构建一个从Web服务获取数据并允许我在应用程序中处理数据的应用程序 我需要的数据正在一个网站上发布,因此为了访问数据,我必须使用开发人员工具尝试找到在网站上返回数据的调用 我已经找到了这个调用,我可以看到正在发出的请求,因此作为第一步,我尝试模拟这个调用,以便在我做任何其他操作之前得到相同的结果 但是,当我请求数据时,我得到一个错误,说明: 键必须是第1行第2列的字符串 所以我想我在请求正文中发送的数据有问题,但我不知道是什么 由于错误指出“键”必须是字符串,我认为可能必须使用键/值对

我正在尝试构建一个从Web服务获取数据并允许我在应用程序中处理数据的应用程序

我需要的数据正在一个网站上发布,因此为了访问数据,我必须使用开发人员工具尝试找到在网站上返回数据的调用

我已经找到了这个调用,我可以看到正在发出的请求,因此作为第一步,我尝试模拟这个调用,以便在我做任何其他操作之前得到相同的结果

但是,当我请求数据时,我得到一个错误,说明:

键必须是第1行第2列的字符串

所以我想我在请求正文中发送的数据有问题,但我不知道是什么

由于错误指出“键”必须是字符串,我认为可能必须使用键/值对,但我可以在开发人员工具中清楚地看到提到了一种内容类型:

内容类型:application/json

所以在我看来,我需要发送JSON。 另外,当我查看请求负载时,我看到正在发送一个JSON格式的字符串:

{"query":"\n      query getData {\n        other data which I have removed for clarity \n        }\n    "}
因此,即使我复制了在开发人员工具中看到的整个字符串,并将其作为JSON格式的字符串发送给服务。我仍然收到错误信息

下面是我正在使用的代码:

        using (var client = new HttpClient())
        {
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

            client.BaseAddress = new Uri("https://api.thesite.com");

            string json = "{'query':'\n      query getData {\n        yada yada yada ...      }\n    '}";
            var content = new StringContent(json, Encoding.UTF8, "application/json");
            
            var result = await client.PostAsync("/data/history", content);
            string resultContent = await result.Content.ReadAsStringAsync();
        }
我知道,如果不访问实际数据本身,就很难对其进行这样的故障排除。但我不是在找人帮我解决问题,我只是想了解问题到底是什么

我是否使用了错误的函数?我是否需要再次用JSON对其进行编码,然后将其序列化为JSON,而不是使用实际的序列化JSON字符串

这些就是我现在想知道的事情

我希望有人能启发我


谢谢

当我将您的JSON发布到验证器时,带有单引号的版本会给出与您类似的错误,当我发布双引号的版本时,它会返回为有效的JSON。尝试在
字符串json=…
赋值中使用转义双引号。e、 g.
string json=“{\'query\':\”\n query getData{\n yada yada yada…}\n\“}”你是对的。单引号确实引起了一个问题。而且\n换行符也有问题,但在删除这些问题后,我完美地恢复了数据。非常感谢。