问题标签 [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.
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?
重现代码:
asp.net-web-api - HttpClient ReadAsAsync - 在完成时做一些事情
我有从 ASP.NET Web API 读取响应的代码,如下所示:
当我得到响应/结果时,我试图显示某种消息。不过,似乎没有任何效果 - 我的标签没有更新。
显然,我做错了什么 - 收到响应后如何向用户显示消息?
TIA
编辑:
如下所示,我声明:
TaskScheduler scheduler = TaskScheduler.FromCurrentSynchronizationContext();
并传入“调度程序”(尝试使用两个 ContinueWiths),但仍然似乎没有任何效果。实际上,现在我在 lblMessage.Text... 上的断点没有达到。
c# - 如何使用 ReadAsAsync使用此数据架构?
我正在使用 System.Net.Http.HttpClient(目前在 NuGet中可用的版本)从 json 格式的服务中检索数据。数据大致如下:
我用来HttpContentExtensions.ReadAsAsync<T>
将该 json 字符串反序列化为对象图。类型定义大致如下:
问题是:我希望物品的类型children
因kind
物业而异。如果kind
是“type1”,那么我想反序列化一个对象......让我们称之为Type1
。如果kind
是“type3”那么我想要一个类型的对象Type3
。
现在,我可以反序列化 aList<Type1>
或 a List<Type3>
,但我不知道如何告诉反序列化逻辑来区分两者。
我可以将“type1”数据对象和“type3”数据对象的所有属性合并到一个.NET 类型中。但是属性的数量足够大,这会变得混乱。
如果 JSON(在这种情况下data
)中的属性名称不同,我可以使用它来区分。例如,如果数据如下所示:
...然后我可以在.NET中做这样的事情:
但我的数据架构看起来不像那样。
是否可以根据数据的内容来选择反序列化的类型?换句话说,查看一个属性(在本例中为kind
)的值以确定如何反序列化另一个属性(在本例中为data
)的内容。
或者是否可以在 ReadAsAsync 尝试反序列化之前注入作用于 JSON 的过滤器或转换器?
如果是这样,如何?
asp.net-web-api - 单元测试场景中带有asp.net WebApi的HttpClient
我有一个集成测试,我想用它作为测试我的 WebAPI 控制器的基础。
最初我认为我必须在自主机模式下设置 WebAPI 并通过本地 Http 执行端到端测试。
然而,我后来通过查看 WebApiContrib 项目中的测试意识到,可以设置一个带有 HttpServer 设置的 HttpClient 以及到 WebAPI 控制器的正确服务路由。我似乎可以对控制器进行单元测试,而无需在自托管模式下设置 WebApi。我可以在客户端的请求中输入任何域名,并且 HttpClient 似乎自动神奇地绑定到正确的控制器。
这里是否发生了任何 Http 传输,使用一些本地进程间通信或纯粹“看到”服务器位于同一个应用程序域中并因此使用反射?发生这种情况的幕后原因是什么?
代码:
c# - 如何让 System.Net.Http.HttpClient 不遵循 302 重定向?
该应用程序使用 client.PostAsync() 发送帖子。我希望它不遵循 302 重定向。
如何?
我想我可以按照这个答案AllowAutoRedirect
中的描述进行设置。
但是如何HttpWebRequest
在 PostAsync() 调用中使用?
c# - 如何判断 HttpClient 何时超时?
据我所知,没有办法知道它具体是发生了超时。我没有找对地方,还是我错过了更大的东西?
这将返回:
发生一个或多个错误。
一个任务被取消了。
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()
扩展方法:
c#-4.0 - 如何配置 HttpClient 在收到 301 HTTP 状态码时不自动重定向?
考虑一个重定向的 ASP.NET Web API 服务
尝试验证将数据发布到“api/this”会将您重定向到“api/that”,我有以下测试方法:
真正发生的情况是 HTTP 状态代码使用正确的 Location 标头发送到客户端,然后 HttpClient 会自动在该 URI 上执行 GET。结果,我的测试从未通过。
如何将 HttpClient 配置为在收到 301 时不自动重定向,以便我可以验证我的服务器响应?
c# - 如何为 HttpClient 请求设置 Content-Type 标头?
我正在尝试根据我正在调用的 API 的要求设置对象的Content-Type
标头。HttpClient
我尝试设置Content-Type
如下:
它允许我添加Accept
标题,但是当我尝试添加Content-Type
它时会引发以下异常:
误用的标头名称。确保请求标头与 一起使用
HttpRequestMessage
,响应标头与 一起使用HttpResponseMessage
,内容标头与HttpContent
对象一起使用。
如何Content-Type
在HttpClient
请求中设置标头?