无法添加参数以使用C#RestSharp客户端发出GET请求

无法添加参数以使用C#RestSharp客户端发出GET请求,c#,json,restsharp,C#,Json,Restsharp,这是我第一次使用API,我非常感谢您对我的帮助和耐心 我正在向客户端Synccentric发出获取数据的GET请求[下面给定的URL我用于ref] [更新] 我找到了一种将参数附加到querystring的方法,并验证了响应。我仍然需要传递字段数组 var client = new RestClient("https://v3.synccentric.com/api/v3/products"); var request = new RestReq

这是我第一次使用API,我非常感谢您对我的帮助和耐心

我正在向客户端Synccentric发出获取数据的GET请求[下面给定的URL我用于ref]

[更新]

我找到了一种将参数附加到querystring的方法,并验证了响应。我仍然需要传递字段数组

            var client = new RestClient("https://v3.synccentric.com/api/v3/products");
            var request = new RestRequest(Method.GET);
            Console.WriteLine("**** Adding Headers, Content Type & Auth Key ****");
            request.AddHeader("Content-Type", "application/json");
            request.AddHeader("Authorization", "Bearer {{MyAPIToken}}");
            request.AddParameter("campaign_id", 12618);
            request.AddParameter("downloadable", 1);
            request.AddParameter("downloadable_type", "csv");
            string[] fields = new[] { "asin", "upc", "actor", "all_categories", "is_eligible_for_prime", "listing_url" };
            request.AddParameter("fields", fields);
            IRestResponse response = client.Execute(request);
我想我知道问题出在哪里了

因此,第[5]个参数理想情况下应包含此值“[\n\“asin\”、\n\“upc\”、\n\“附加图像\u 1\”、\n\“类别”、\n\“是否符合\u prime\”、\n\“列表\u url\”\n]”

但是它看起来是这样的

你们能帮我吗

我使用Python尝试了API调用,并引用了文档,最终得到了期望的响应

在下面附加python块:

import requests
url = 'https://v3.synccentric.com/api/v3/products'
payload = "{\n    \"campaign_id\": 12618,\n    \"fields\": [\n        \"asin\",\n        \"upc\",\n        \"additional_image_1\",\n        \"category\",\n        \"is_eligible_for_prime\",\n        \"listing_url\"\n    ]\n}    #\"downloadable\":1,\n       \"downloadable_type\":\"csv\"\n}"
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer {{MyAPIToken}}'
}
response = requests.request('GET', url, headers = headers, data = payload,  timeout= 100000 , allow_redirects= 0)
print(response.text)

执行死刑后,我得到了我想要的回应

RestSharp将不允许您发送包含内容正文的GET请求。错误说明了一切

您必须将参数作为查询参数发送

Console.WriteLine("**** Starting Synccentric API Fetch ****");
var client = new RestClient("https://v3.synccentric.com/api/v3/products");
var request = new RestRequest(Method.GET);

Console.WriteLine("**** Adding Headers, Content Type & Auth Key ****");
request.AddHeader("Content-Type", "application/json");
request.AddHeader("Authorization", "Bearer {{MyAPIToken}}");

Console.WriteLine("**** Adding parameters ****");
request.AddParameter("campaign_id", 12618);
request.AddParameter("downloadable", "true");
request.AddParameter("downloadable_type", "CSV");

var fields = new[] { "asin", "upc", "actor", "all_categories" };
foreach (var field in fields)
{
    request.AddParameter("fields", field);
}

IRestResponse response = client.Execute(request);
这将为您构建以下查询字符串,应该发送该字符串,希望您能够理解

https://v3.synccentric.com/api/v3/products?campaign_id=12618&downloadable=True&downloadable_type=CSV&fields=asin&fields=upc&fields=actor&fields=all_categories

更新查看评论后,可能是RestSharp无法与该API一起使用,因为它似乎需要包含GET请求的内容体

RestSharp不允许您发送包含内容正文的GET请求。错误说明了一切。您必须将参数作为查询参数发送,例如,
request.AddParameter(“campaign_id”,12618)获取没有正文参数,只有post。正如phuzi所说,所有get参数都在url中line@phuzi感谢您的回复,我现在如何将字段数组作为字符串传递?从中,除非我读错了,否则该API似乎违反了正常的HTTP规则/约定,因为在GET请求中需要请求主体。这是非常不寻常的,也不是正常的预期。您可能必须使用不同的HTTP客户端库,该库对您在请求中输入的内容更为宽松。()但至少它提供了与POST相同的操作,以防。。。无论如何,错误在于库而不是API。RFCs 7230-7237中没有任何内容禁止GET()中的body数据,在任何情况下,服务器都可以忽略de body或使用指示问题的http代码进行响应。如果我是你,我会尝试的第一件事就是改变方法;以防万一…@phuzi谢谢你的这种方法,你的回答让我清楚了QueryString是如何期待字段的。你对foreach子句的理解完全正确。再次感谢!!