HttpClient可以为GET请求发送内容或正文吗?

目前要向API接口发送参数化GET请求,我正在编写以下代码:

api/master/city/filter?cityid=1&citycode='ny' 

但我发现URL长度限制为2,083个字符。

为了避免这种情况,我想在内容体中以json格式发送参数以获取GET请求。

但是,我发现HttpClient的Get方法都不允许发送内容正文。 对于POST我可以看到HttpClient中有一个名为PostAsync的方法允许内容体。

有没有办法为不在URL中的GET请求发送参数以避免URL长度限制?

首先要做的事情是:您正在与之交谈的服务器和API都需要明确支持使用正文的GET请求。 如果他们不这样做,就没有必要向他们发送他们不能/不会解释的请求。

其次,请注意许多代理仅基于URL缓存GET请求,而不是正文(因为他们期望所述请求缺少正文,因为旧版本的HTTP规范)。 如果你通过这样的代理向身体A发出GET请求,然后向同一个URL发出GET请求但是身体B,则代理将永远不会向身体B发出请求 – 它将返回身体A的缓存响应。这可能导致一些令人头疼的调试!

如果以上都不是问题,那么以下代码将适用于您, 但仅适用于.NET Core (非标准框架):

 using (var client = new HttpClient()) { var request = new HttpRequestMessage { RequestUri = new Uri("some url"), Method = HttpMethod.Get, }; request.Content = new ByteArrayContent(Encoding.UTF8.GetBytes("some json")); request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json"); // change as necessary var result = client.SendAsync(request).Result; result.EnsureSuccessStatusCode(); var responseBody = await result.Content.ReadAsStringAsync().ConfigureAwait(false); }