使用 httpclient 使用 Json Body 调用 Get 请求

     2023-03-31     210

关键词:

【中文标题】使用 httpclient 使用 Json Body 调用 Get 请求【英文标题】:Calling Get Request with Json Body using httpclient 【发布时间】:2020-08-09 14:21:41 【问题描述】:

今天早上我遇到了一个问题,我调用的 Api 是一个 Get 方法,但要从中获取数据,我必须发送 json 正文,这在我在邮递员中测试时效果很好,但是我无法在我使用 HttpClient 调用它的项目中实现它

这是帖子的截图

它还有一个我在授权中传递的不记名令牌

现在,当我尝试在客户端实现此功能时,这是我的代码

  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,但我无法更改它,因此需要找到解决方案

【问题讨论】:

oof,您也许可以使用 tcp 来代替。你也可以试试 WebClient。 @John 我正在尝试在我的 Xamarin 项目中实现这一点 WebClient 在我的 Xamarin 项目中为我工作。您也可以尝试 WebClient.UploadData。您还确定 application/json 是正确的格式吗?它可能只是文本而不是 json,这就是服务器拒绝你的原因。 HttpClient 不适用于带有正文的 GET 请求。 【参考方案1】:

几乎全部搜索并尝试使用 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

【讨论】:

你可以标记这个答案,这将帮助更多有同样问题的人:)。

使用 HttpClient 发布 JSON 数据

】使用HttpClient发布JSON数据【英文标题】:PostingJSONdatausingHttpClient【发布时间】:2016-06-2705:21:48【问题描述】:我正在尝试以编程方式在VisualStudioTeamServices(以前的VisualStudioOnline)中创建服务挂钩订阅。在TeamServices中创建项目时... 查看详情

Angular:无法使用 HttpClient 获取本地 json

】Angular:无法使用HttpClient获取本地json【英文标题】:Angular:UnabletoGETlocaljsonusingHttpClient【发布时间】:2018-05-2522:03:03【问题描述】:我正在使用Angular5中提供的最新HttpClient组件对本地json发出获取请求,但从那以后我得到404。我... 查看详情

使用 httpclient 使用 Json Body 调用 Get 请求

】使用httpclient使用JsonBody调用Get请求【英文标题】:CallingGetRequestwithJsonBodyusinghttpclient【发布时间】:2020-08-0914:21:41【问题描述】:今天早上我遇到了一个问题,我调用的Api是一个Get方法,但要从中获取数据,我必须发送json正文... 查看详情

使用 HttpClient 发布 JSON 数据时出现错误 400

】使用HttpClient发布JSON数据时出现错误400【英文标题】:Gettingerror400whenIpostaJSONdatawithHttpClient【发布时间】:2019-01-3011:37:55【问题描述】:我正在尝试将JSON格式的数据发布到API:我的JSON数据是:"itemData":"Name":"test","Priority":"High","S... 查看详情

Xamarin Forms 使用 httpclient 下载 json 文件:ReadAsStringAsync 还是 DownloadFileAsync?

】XamarinForms使用httpclient下载json文件:ReadAsStringAsync还是DownloadFileAsync?【英文标题】:XamarinFormsdownloadajsonfilewithhttpclient:ReadAsStringAsyncorDownloadFileAsync?【发布时间】:2020-08-2916:37:57【问题描述】:我使用json文件在XamarinFormsAndroid 查看详情

使用 HttpClient 向本地 json 文件发送 POST 请求

】使用HttpClient向本地json文件发送POST请求【英文标题】:POSTrequesttoalocaljsonfileusingHttpClient【发布时间】:2019-07-1915:11:58【问题描述】:我的Angular应用程序的资产中有一个名为fake.json的json文件。这个文件的路径是这样的。MyApp=>... 查看详情

C# 使用 HttpClient 从 JSON 响应中获取特定对象

】C#使用HttpClient从JSON响应中获取特定对象【英文标题】:C#GetspecificobjectfromJSONresponseusingHttpClient【发布时间】:2016-06-0215:51:37【问题描述】:我正在尝试从googlemapsapi解析json以进行地理编码。JSON是:"results":["address_components":["long_... 查看详情

使用 HttpClient 和 C# 在 post 请求中发送 json

】使用HttpClient和C#在post请求中发送json【英文标题】:SendajsononapostrequestwithHttpClientandC#【发布时间】:2019-05-2716:50:49【问题描述】:我的代码有问题,我的目标是通过API发送修改,所以我在HttpClient上执行request。usingSystem;usingSystem... 查看详情

如何使用 HttpClient 将带有 JSON 的 DELETE 发送到 REST API

】如何使用HttpClient将带有JSON的DELETE发送到RESTAPI【英文标题】:HowtosendDELETEwithJSONtotheRESTAPIusingHttpClient【发布时间】:2015-01-2020:25:54【问题描述】:我必须使用HttpClient类向具有JSON内容的RESTAPI服务发送删除命令,但无法使其正常... 查看详情

httpClient Symfony 中的 Json 选项抛出错误

】httpClientSymfony中的Json选项抛出错误【英文标题】:JsonoptioninhttpClientSymfonythrowerror【发布时间】:2022-01-1313:55:52【问题描述】:我在symfony上使用httpClient,我正在调用一个API我想使用json选项而不是使用body但它不起作用,当我使... 查看详情

如何使用 HttpClient 将 JSON 数据发布到 Web API

】如何使用HttpClient将JSON数据发布到WebAPI【英文标题】:HowtoPostJSONdatatoaWebAPIusingHttpClient【发布时间】:2016-07-0610:24:40【问题描述】:我有以下代码,基本上它接受一个动态对象(在这种情况下是类型文件)并使用HTTPClient类尝试... 查看详情

使用 HTTPClient 的简单 C# JSON-RPC(仅限客户端)

】使用HTTPClient的简单C#JSON-RPC(仅限客户端)【英文标题】:SimpleC#JSON-RPC(Clientonly)UsingHTTPClient【发布时间】:2018-01-0315:47:56【问题描述】:有几个例子,包括AustinHarris.JsonRPC,其中包括完全打包的JSON-RPC服务器。我可以为客户找... 查看详情

使用 httpClient windows Phone 8.1 发布 JSON 对象

】使用httpClientwindowsPhone8.1发布JSON对象【英文标题】:PostJSONObjectusinghttpClientwindowsPhone8.1【发布时间】:2014-11-1412:40:58【问题描述】:我正在尝试从WindowsPhone应用程序将json对象发布到webapi项目,但我仍然收到404错误。对于post方法... 查看详情

如何在 Android 中使用 HTTPClient 以 JSON 格式发送 POST 请求?

】如何在Android中使用HTTPClient以JSON格式发送POST请求?【英文标题】:HowtosendPOSTrequestinJSONusingHTTPClientinAndroid?【发布时间】:2011-09-0706:28:57【问题描述】:我试图弄清楚如何使用HTTPClient从AndroidPOSTJSON。我一直试图弄清楚这一点,... 查看详情

使用 PostAsync、HttpClient 和 Json 从 Windows Phone 8.1 调用 REST

】使用PostAsync、HttpClient和Json从WindowsPhone8.1调用REST【英文标题】:CallingRESTfromWindowsPhone8.1usingPostAsync,HttpClient&Json【发布时间】:2014-06-3000:10:56【问题描述】:我的问题与CallingMVC4WebAPImethodsfromC#MetroUIClientusingPostAsync,Http 查看详情

使用 HttpClient 将 Content-Type 设置为“application/json”并将对象添加到正文

】使用HttpClient将Content-Type设置为“application/json”并将对象添加到正文【英文标题】:useHttpClienttosettheContent-Typeto"application/json"andaddobjecttothebody【发布时间】:2019-01-3122:41:02【问题描述】:我正在尝试使用HttpClient创建以下... 查看详情

使用 .NET 4.0 任务模式使用 HTTPClient .ReadAsAsync 将 JSON 反序列化为数组或列表

】使用.NET4.0任务模式使用HTTPClient.ReadAsAsync将JSON反序列化为数组或列表【英文标题】:DeserializeJSONtoArrayorListwithHTTPClient.ReadAsAsyncusing.NET4.0Taskpattern【发布时间】:2014-06-1000:27:49【问题描述】:我正在尝试使用.NET4.0任务模式反序列... 查看详情

HttpClient.PutAsync - “实体只允许使用 JSON Content-Type 标头写入”

】HttpClient.PutAsync-“实体只允许使用JSONContent-Type标头写入”【英文标题】:HttpClient.PutAsync-"EntityonlyallowswriteswithaJSONContent-Typeheader"【发布时间】:2017-10-0912:26:37【问题描述】:我有一个可以完美发布数据的POST方法。查看... 查看详情