使用 httpclient 调用带有 Json Body 的 Get Request
Calling Get Request with Json Body using httpclient
今天早上我遇到了一个问题,我调用的 Api 是一个 Get 方法,但要从中获取数据,我必须发送 json 正文,这很好用当我在 post 人中测试它但我无法在我使用 HttpClient
调用它的项目中实现它时
这里是post
的截图
它还有一个我在授权中传递的不记名令牌
现在,当我尝试在客户端实现它时,这里是我的代码
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);
从 Microsoft.AspNetCore.WebUtilities 包中获取了 QueryHelpers
今天早上我遇到了一个问题,我调用的 Api 是一个 Get 方法,但要从中获取数据,我必须发送 json 正文,这很好用当我在 post 人中测试它但我无法在我使用 HttpClient
调用它的项目中实现它时这里是post
的截图它还有一个我在授权中传递的不记名令牌
现在,当我尝试在客户端实现它时,这里是我的代码
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);
从 Microsoft.AspNetCore.WebUtilities 包中获取了 QueryHelpers