问题标签 [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 投票
3 回答
2144 浏览

silverlight - 无法将 System.Net.Http 包安装到 Windows Phone 7.1 Silverlight 项目中

我使用 Nuget 安装“Microsoft ASP.NET Web API 客户端库”来获取最新的 System.Net.Http 程序集,用于 Windows Phone 7.1 XNA 和 Silverlight 项目。它可以很好地安装到我的 WP7.1 XNA 项目中,但不允许我将它安装到 WP7.1 Silverlight 项目中。我什至尝试将它直接从包管理器控制台安装到新创建的 WP7.1 Silverlight 项目中,并得到以下错误响应:

System.Net.Http 是否与 WP7.1 Silverlight 项目兼容,如果是,我怎样才能让它工作?

谢谢

0 投票
1 回答
3217 浏览

http-post - 使用 HttpClient.PostAsJsonAsync 发布标量数据类型

我正在使用 HttpClient 调用 ASP .Net Web API 并成功调用操作。我也可以将自定义对象发布到行动中。

现在我面临的问题是,无法发布标量数据类型,如整数、字符串等......

下面是我的控制器和调用动作的应用程序代码

// 测试调用的应用程序

// Web API 中的控制器和动作

当我在 Northwind 数据库中发布代表“类别”表的客户对象时,所有事情都正常工作,但我无法发布像整数和字符串这样的标量数据

当我发布字符串数据类型时,出现以下异常

{"Message":"没有找到与请求 URI ' http://localhost:49931/api/Supplier/RemoveCategory/ '匹配的 HTTP 资源。","MessageDetail":"在控制器 'Supplier' 上没有找到任何操作匹配请求。"}

谁能指导我?

0 投票
1 回答
1055 浏览

.net - HttpClient 在 WinRT / Win8 中缺少响应标头

我在 Windows 8 应用程序中使用 HttpClient,它似乎故意在响应中隐藏自定义标头。例如:

我们收到的响应有一个名为“Sample-Header: 123”的自定义标头

我希望响应内容中的标头包含值为“123”的“Sample-Header”

即使我枚举了标题,我也永远找不到我们的自定义标题。

0 投票
2 回答
812 浏览

json - 带有 HttpClient 但未知 JSON 响应的 REST api

我正在使用 WebApi httpclient 构建一个 .net api 库以用于 REST Web 服务。

其余服务返回 JSON。

我遇到的问题是,对于一个请求,我可能会得到不同的 JSON 格式。

如果查询成功,我会返回一个 JSON 数组,我已经创建了一个强大的 c# 类型来保存它。

使用 ReadAsAsync<T> 方法将其从内容中取出。

如果请求中有错误的 api 键或发生其他错误,则其余服务会返回一个 JSON 对象,其中包含一些属性,例如 status=error 和解释消息等。

然后我不能只使用 ReadAsAsync< T > 方法,因为我不知道返回的是什么格式。我对 JSON linq 库了解不多,但有没有办法可以将 JSON 响应放入某个 JSON 持有者对象中,然后检查其中是否存在 status=error,然后对我的强类型使用正确的反序列化。

我似乎能够将它存储在 JRaw 对象中,但不知道从这里去哪里。

非常感谢。

0 投票
2 回答
8682 浏览

c# - 区分用户取消超时

HttpClient具有内置超时功能(尽管都是异步的,即超时可以被认为与 http 请求功能正交,因此可以由通用异步实用程序处理,但除此之外)并且当超时开始时,它会抛出一个TaskCanceledException(包裹在一个AggregateException)。

TCE 包含一个CancellationToken等于CancellationToken.None

现在,如果我提供自己的HttpClientaCancellationToken并使用它在操作完成(或超时)之前取消操作,我会得到完全相同的TaskCanceledException,再次使用 a CancellationToken.None

有没有办法通过只查看抛出的异常来确定超时是否取消了请求,而不必让我自己CancellationToken访问检查异常的代码?

PS这可能是一个错误并且CancellationToken以某种方式错误地修复了CancellationToken.None吗?在使用自定义 CancellationToken 取消的情况下,我希望TaskCanceledException.CancellationToken等于该自定义令牌。

编辑 为了使问题更清楚一点,通过访问原始CancellationTokenSource,很容易区分超时和用户取消:

origCancellationTokenSource.IsCancellationRequested == true

CancellationToken从异常中获取虽然给出了错误的答案:

((TaskCanceledException) e.InnerException).CancellationToken.IsCancellationRequested == false

由于受欢迎的需求,这里有一个最小的例子:

0 投票
1 回答
1025 浏览

dotnet-httpclient - 在 C# 中使用 Post 方法 HttClient 时请求超时

在我的应用程序中,我使用一段代码将内容发送到一个带有 URL 的 Web 代理,每个帖子之间的间隔为 2 秒。在以下代码中发布的消息以静态字符串的形式给出,但在原始应用程序代码中将是动态的。

但是我在联系代理时遇到了以下异常。我不是一直都明白,消息确实经过了一段时间,但最终,这个异常来了。

GetResponse 超时 ---> System.TimeoutException: GetResponse 超时 ---> System.Net.WebException ---> System.Net.WebException: 该操作在 Microsoft 的 System.Net.HttpWebRequest.GetResponse() 处超时.Http.HttpWebRequestTransportStage.HttpTransportAsyncResult.PopulateWebResponseSync(WebRequest request, IAsyncResult result) at Microsoft.Http.HttpWebRequestTransportStage.HttpTransportAsyncResult.PopulateWebResponse(HttpTransportAsyncResult self, IAsyncResult result, Func`3 getResponse) --- 内部异常堆栈跟踪结束 --- - -- 内部异常堆栈跟踪结束 --- 在 Microsoft.Http.AsyncResult.End[TAsyncResult](IAsyncResult result, Boolean throwException) 在 Microsoft.Http.HttpWebRequestTransportStage.EndProcessRequestAndTryGetResponse(IAsyncResult 结果, HttpResponseMessage&response, Object& state) 在 Microsoft.Http.Http.HttpWebRequestTransportStage.ProcessRequestAndTryGetResponse(HttpRequestMessage request, HttpResponseMessage& response, Object& state) 在 Microsoft.Http.HttpStageProcessingAsyncResult.NextRequest(HttpStageProcessingAsyncResult self) --- End of internal exception stack trace--- 在 Microsoft。 Http.HttpStageProcessingAsyncResult.Complete(HttpStage stage, Exception e) at Microsoft.Http.HttpStageProcessingAsyncResult.NextRequest(HttpStageProcessingAsyncResult self) at Microsoft.Http.HttpClient.Send(HttpRequestMessage request) at Microsoft.Http.HttpClient.Send(HttpMethod method, Uri uri , RequestHeaders headers, HttpContent content) 在 Microsoft.Http.HttpMethodExtensions.Method(HttpClient client, HttpMethod method, Uri uri, HttpContent body) 在 Microsoft。Http.HttpMethodExtensions.Method(HttpClient 客户端,HttpMethod 方法,String uri,HttpContent 正文)

但是这个代理只是重定向到另一个代理。所以我也直接尝试了那个。在那里,我能够成功地执行此操作 2 或 3 次,但之后又产生了另一个异常。我又试了一次,但这一次,第一次尝试本身就出现了异常。我等了一段时间,然后再次尝试,令人惊讶的是,它确实经历了 2 或 3 次,然后异常再次出现。这次我得到的例外是不同的,就是这个......

Microsoft.Http.HttpStageProcessingException ---> System.Net.WebException ---> System.Net.WebException:底层连接已关闭:连接意外关闭。在 System.Net.HttpWebRequest.GetResponse() 在 Microsoft.Http.HttpWebRequestTransportStage.HttpTransportAsyncResult.PopulateWebResponseSync(WebRequest request, IAsyncResult result) 在 Microsoft.Http.HttpWebRequestTransportStage.HttpTransportAsyncResult.PopulateWebResponse(HttpTransportAsyncResult self, IAsyncResult result, Func3 getResponse) --- End of inner exception stack trace --- at Microsoft.Http.AsyncResult.End[TAsyncResult](IAsyncResult result, Boolean throwException) at Microsoft.Http.AsyncResult.End[TAsyncResult](IAsyncResult result) at Microsoft.Http.AsyncResult1.在 Microsoft.Http.HttpWebRequestTransportStage.ProcessRequestAndTryGetResponse(HttpRequestMessage request, HttpResponseMessage& response, Object& state) 在 Microsoft.Http.HttpStageProcessingAsyncResult 的 Microsoft.Http.HttpWebRequestTransportStage.EndProcessRequestAndTryGetResponse(IAsyncResult 结果, HttpResponseMessage& 响应, Object& 状态) 的结束(IAsyncResult 结果)。 NextRequest(HttpStageProcessingAsyncResult self) --- 内部异常堆栈跟踪结束 --- Microsoft.Http.HttpStageProcessingAsyncResult.Complete(HttpStage stage, Exception e) 在 Microsoft.Http.HttpStageProcessingAsyncResult.NextRequest(HttpStageProcessingAsyncResult self) 在 Microsoft.Http.HttpStageProcessingAsyncResult ..ctor(HttpStageProcessingAsyncState 状态,AsyncCallback 回调,对象用户)在 Microsoft.Http.HttpClient。在 Microsoft.Http.HttpClient.Send(HttpMethod method, Uri uri, HttpContent content) 在 Microsoft.Http.HttpMethodExtensions 在 Microsoft.Http.HttpClient.Send(HttpMethod method, Uri uri, HttpContent content) 在 Microsoft.Http.HttpMethodExtensions 发送(HttpRequestMessage 请求) .Method(HttpClient 客户端, HttpMethod 方法, Uri uri, HttpContent body) 在 Microsoft.Http.HttpMethodExtensions.Method(HttpClient 客户端, HttpMethod 方法, String uri, HttpContent body) 在 Microsoft.Http.HttpMethodExtensions.Post(HttpClient 客户端, String uri , HttpContent 正文)Microsoft.Http.HttpMethodExtensions.Post(HttpClient 客户端,字符串 uri,HttpContent 正文)上的 Http.HttpMethodExtensions.Method(HttpClient 客户端,HttpMethod 方法,字符串 uri,HttpContent 正文)Microsoft.Http.HttpMethodExtensions.Post(HttpClient 客户端,字符串 uri,HttpContent 正文)上的 Http.HttpMethodExtensions.Method(HttpClient 客户端,HttpMethod 方法,字符串 uri,HttpContent 正文)

在这方面的任何帮助将不胜感激,因为过去几天我一直在关注此问题,并且我也阅读了一些文章,甚至还阅读了 stackoverflow 中的一些问题,但没有任何帮助。提前致谢...

0 投票
2 回答
1232 浏览

.net - 如何确定执行期间来自异步 httpclient 的并发请求数?

我有一个简单的控制台应用程序,如下所示:

在这里,我发起了 10 个异步 Web 请求,并在请求完成时收集响应代码并列出它们。

  1. 问题:是否可以使用 VS2012 调试应用程序,以便我可以确定在执行期间任何给定点发生的并发 Web 请求的数量?

原因是我发现您可以在以下位置进行更改App.config

但是,我没有一个好方法来确定这是否真的有效。

  1. 服务器是否设置此限制?

  2. 操作系统是否设置了此限制?

  3. 此应用程序配置和/或 .NET 是否设置了此限制?

0 投票
2 回答
2759 浏览

asynchronous - HttpClient 任务被取消

我正在尝试使用 HttpClient 使用以下代码将消息异步记录到 REST 服务:

注意:GetRequestMessage 返回一个 HttpRequestMessage。

但我收到一条错误消息,指出“任务已取消。”

有任何想法吗?

0 投票
1 回答
21257 浏览

c# - 使用来自 FormCollection 的数据发出异步 HttpClient 发布请求

我正在做一个 Asp.Net MVC 4 项目,并且正在寻找对我们的 api 服务的内部请求(如代理)。

这就是我的控制器中 index 方法的样子。我被困在 PostAsync 部分。

我想将我的“application/x-form-urlencoded”“body”内容传递给 PostAsync POST 方法。但是,我收到错误消息“正文不是 HttpContent 类型”。

我无法投射或转换。现在怎么办?

让我知道我在这里做错了什么。

埃里克

0 投票
2 回答
2321 浏览

c# - 使用 Web API HttpClient 时如何概括登录、操作和注销

我正在使用HttpClient(又名 Web API 客户端)来使用 RESTfull 服务。服务需要在每次操作时建立(通过登录)然后销毁(通过注销)会话。所以调用服务 A 看起来像这样(伪代码)

我的问题是,我怎样才能轻松地为不同的操作重用设置、登录和注销?我是否应该创建一些将采用 Action<> 的方法,如果是这样,我如何确保操作按顺序发生?