C# 使用httpclient调用Json主体的Get请求
今天早上我遇到了一个问题,我调用的Api是一个Get方法,但是为了从中获取数据,我必须发送json正文。当我在post man中测试它时,它工作得很好,但是我无法在我的项目中实现它,我使用HttpClient调用它 这是post的截图 它还有一个我在授权中传递的不记名代币 现在,当我试图在客户端实现这一点时,这里是我的代码C# 使用httpclient调用Json主体的Get请求,c#,xamarin,.net-core,xamarin.forms,httpclient,C#,Xamarin,.net Core,Xamarin.forms,Httpclient,今天早上我遇到了一个问题,我调用的Api是一个Get方法,但是为了从中获取数据,我必须发送json正文。当我在post man中测试它时,它工作得很好,但是我无法在我的项目中实现它,我使用HttpClient调用它 这是post的截图 它还有一个我在授权中传递的不记名代币 现在,当我试图在客户端实现这一点时,这里是我的代码 var stringPayload = JsonConvert.SerializeObject(json); var client = new Http
var stringPayload = JsonConvert.SerializeObject(json);
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri("https://myapiendpoint/serviceability/"),
Content = new StringContent(stringPayload, Encoding.UTF8, "application/json"),
};
var response = await client.SendAsync(request).ConfigureAwait(false);
response.EnsureSuccessStatusCode();
var responseBody = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
当我使用这个代码调用这个方法时,我得到
System.Net.HttpStatusCode.MethodNotAllowed - Status code 405
我也试着改变这一行
Method = HttpMethod.Get to Method = HttpMethod.Post
但仍然得到同样的错误
我知道这在API端是一个糟糕的实现,理想情况下请求应该是POST,但更改这一点不在我手中,因此需要找到解决方案,几乎搜索所有地方,并尝试使用GET方法的所有变体最后,在本例中对我有效的解决方案是
var client = new HttpClient();
client.BaseAddress = new Uri("https://baseApi/");
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Add("Authorization", string.Format("Bearer {0}", token));
var query = new Dictionary<string, string>
{
["pickup_postcode"] = 400703,
["delivery_postcode"] = 421204,
["cod"] = "0",
["weight"] = 2,
};
var url = "methodurl";
var response = await client.GetAsync(QueryHelpers.AddQueryString(url, query));
var responseBody = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
return JsonConvert.DeserializeObject<MyModel>(responseBody);
var-client=new-HttpClient();
client.BaseAddress=新Uri(“https://baseApi/");
client.DefaultRequestHeaders.Accept.Add(
新的MediaTypeWithQualityHeaderValue(“应用程序/json”);
Add(“Authorization”,string.Format(“Bearer{0}”,token));
var query=新字典
{
[“收件邮政编码”]=400703,
[“交货邮政编码”]=421204,
[“cod”]=“0”,
[“重量”]=2,
};
var url=“methodurl”;
var response=await client.GetAsync(queryhelp.AddQueryString(url,query));
var responseBody=await response.Content.ReadAsStringAsync().ConfigureAwait(false);
返回JsonConvert.DeserializeObject(responseBody);
从Microsoft.AspNetCore.WebUtilities软件包中获得了查询帮助。如果这样,您可能可以使用tcp代替。您也可以尝试使用WebClient。@John我正试图在我的Xamarin项目中实现此功能WebClient在我的Xamarin项目中为我工作。您也可以尝试WebClient.UploadData。另外,您确定application/json是正确的格式吗?它可能只是文本,而不是json,这就是服务器拒绝您的原因。HttpClient不适用于带有主体的GET请求。您可以标记此答案,这将帮助更多有相同问题的人:)。