问题标签 [dotnet-httpclient]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
7 回答
217306 浏览

c# - HttpClient.GetAsync(...) 在使用 await/async 时永远不会返回

编辑: 这个问题看起来可能是同一个问题,但没有回应......

编辑:在测试用例 5 中,任务似乎卡在WaitingForActivation状态。

我在 .NET 4.5 中使用 System.Net.Http.HttpClient 遇到了一些奇怪的行为——“等待”调用 (eg) 的结果httpClient.GetAsync(...)将永远不会返回。

这仅在使用新的 async/await 语言功能和 Tasks API 时发生在某些情况下 - 仅使用延续时代码似乎总是有效。

这是一些重现问题的代码 - 将其放入 Visual Studio 11 中的新“MVC 4 WebApi 项目”中,以公开以下 GET 端点:

这里的每个端点都返回相同的数据(来自 stackoverflow.com 的响应标头),但/api/test5永远不会完成。

我是否在 HttpClient 类中遇到了错误,或者我是否以某种方式滥用了 API?

重现代码:

0 投票
1 回答
1591 浏览

asp.net-web-api - HttpClient ReadAsAsync - 在完成时做一些事情

我有从 ASP.NET Web API 读取响应的代码,如下所示:

当我得到响应/结果时,我试图显示某种消息。不过,似乎没有任何效果 - 我的标签没有更新。

显然,我做错了什么 - 收到响应后如何向用户显示消息?

TIA

编辑

如下所示,我声明:

TaskScheduler scheduler = TaskScheduler.FromCurrentSynchronizationContext();

并传入“调度程序”(尝试使用两个 ContinueWiths),但仍然似乎没有任何效果。实际上,现在我在 lblMessage.Text... 上的断点没有达到。

0 投票
1 回答
3736 浏览

c# - HttpWebRequest 对每个主机 2 个连接的限制是否适用于 HttpClient?

有没有人知道,如果每个主机 2 个连接的(默认)速率限制适用于 System.Net.Http.HttpClient。

请说明您的信息来源以及是否可以像这样增加此限制,或者是否有更好/更简单的方法来做到这一点。

另外,是否有限制器实现?例如,每分钟最多 40 个电话?

这里有一篇关于使用 Reactive Extensions 的节流策略的好文章,但我想知道是否有 HttpClient 方法来做到这一点。

0 投票
1 回答
1944 浏览

c# - 如何使用 ReadAsAsync使用此数据架构?

我正在使用 System.Net.Http.HttpClient(目前在 NuGet中可用的版本)从 json 格式的服务中检索数据。数据大致如下:

我用来HttpContentExtensions.ReadAsAsync<T>将该 json 字符串反序列化为对象图。类型定义大致如下:

问题是:我希望物品的类型childrenkind物业而异。如果kind是“type1”,那么我想反序列化一个对象......让我们称之为Type1。如果kind是“type3”那么我想要一个类型的对象Type3

现在,我可以反序列化 aList<Type1>或 a List<Type3>,但我不知道如何告诉反序列化逻辑来区分两者。

我可以将“type1”数据对象和“type3”数据对象的所有属性合并到一个.NET 类型中。但是属性的数量足够大,这会变得混乱。

如果 JSON(在这种情况下data)中的属性名称不同,我可以使用它来区分。例如,如果数据如下所示:

...然后我可以在.NET中做这样的事情:

但我的数据架构看起来不像那样。

是否可以根据数据的内容来选择反序列化的类型?换句话说,查看一个属性(在本例中为kind)的值以确定如何反序列化另一个属性(在本例中为data)的内容。

或者是否可以在 ReadAsAsync 尝试反序列化之前注入作用于 JSON 的过滤器或转换器?

如果是这样,如何?

0 投票
1 回答
4289 浏览

asp.net-web-api - 单元测试场景中带有asp.net WebApi的HttpClient

我有一个集成测试,我想用它作为测试我的 WebAPI 控制器的基础。

最初我认为我必须在自主机模式下设置 WebAPI 并通过本地 Http 执行端到端测试。

然而,我后来通过查看 WebApiContrib 项目中的测试意识到,可以设置一个带有 HttpServer 设置的 HttpClient 以及到 WebAPI 控制器的正确服务路由。我似乎可以对控制器进行单元测试,而无需在自托管模式下设置 WebApi。我可以在客户端的请求中输入任何域名,并且 HttpClient 似乎自动神奇地绑定到正确的控制器。

这里是否发生了任何 Http 传输,使用一些本地进程间通信或纯粹“看到”服务器位于同一个应用程序域中并因此使用反射?发生这种情况的幕后原因是什么?

代码:

0 投票
2 回答
17082 浏览

c# - 如何让 System.Net.Http.HttpClient 不遵循 302 重定向?

使用来自 NuGet 的 HttpClient

该应用程序使用 client.PostAsync() 发送帖子。我希望它不遵循 302 重定向。

如何?

我想我可以按照这个答案AllowAutoRedirect中的描述进行设置。

但是如何HttpWebRequest在 PostAsync() 调用中使用?

0 投票
7 回答
158170 浏览

c# - 如何判断 HttpClient 何时超时?

据我所知,没有办法知道它具体是发生了超时。我没有找对地方,还是我错过了更大的东西?

这将返回:

发生一个或多个错误。

一个任务被取消了。

0 投票
1 回答
8949 浏览

c# - PUT 请求导致 400 Bad Request

我正在尝试使用 HttpClient 对 Web API 方法执行 PUT 请求。几乎相同的 POST 请求按预期工作,但 PUT 请求会导致 400(错误请求)错误。我不确定我做错了什么。

这是我的 Web API 控制器代码:

然后是尝试调用这些方法的客户端代码。POST 请求如下所示:

不起作用的 PUT 请求如下所示:

正如你所看到的,我已经尽可能地精简了功能,但每次 PUT 请求时我仍然收到错误。

顺便说一句,我可以使用 RestSharp 客户端成功发出 PUT 请求。此代码成功调用 API 方法:

这样做的问题是,我使用 AddObject 传入的任何对象在到达控制器方法时都只是一个字符串。如果我传入一个 int,我想得到一个 int。HttpClient 使用 POST 方法执行此操作,所以我想使用它,但 PUT 会引发错误。因此,不幸的是,我坚持使用 2 个半工作的解决方案,它们并不能构成一个完整的解决方案。我将不胜感激任何一种模式的反馈,以使其发挥作用。

编辑: 因为它在下面提到,这是我的.ToJsonContent()扩展方法:

0 投票
1 回答
35632 浏览

c#-4.0 - 如何配置 HttpClient 在收到 301 HTTP 状态码时不自动重定向?

考虑一个重定向的 ASP.NET Web API 服务

尝试验证将数据发布到“api/this”会将您重定向到“api/that”,我有以下测试方法:

真正发生的情况是 HTTP 状态代码使用正确的 Location 标头发送到客户端,然后 HttpClient 会自动在该 URI 上执行 GET。结果,我的测试从未通过。

如何将 HttpClient 配置为在收到 301 时不自动重定向,以便我可以验证我的服务器响应?

0 投票
20 回答
1086204 浏览

c# - 如何为 HttpClient 请求设置 Content-Type 标头?

我正在尝试根据我正在调用的 API 的要求设置对象的Content-Type标头。HttpClient

我尝试设置Content-Type如下:

它允许我添加Accept标题,但是当我尝试添加Content-Type它时会引发以下异常:

误用的标头名称。确保请求标头与 一起使用 HttpRequestMessage,响应标头与 一起使用HttpResponseMessage,内容标头与HttpContent对象一起使用。

如何Content-TypeHttpClient请求中设置标头?