C# 使用httpclient调用Json主体的Get请求

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

今天早上我遇到了一个问题,我调用的Api是一个Get方法,但是为了从中获取数据,我必须发送json正文。当我在post man中测试它时,它工作得很好,但是我无法在我的项目中实现它,我使用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);
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请求。您可以标记此答案,这将帮助更多有相同问题的人:)。