Questions tagged «dotnet-httpclient»

指的是System.Net.Http.HttpClient库,它是NuGet上HttpClient包的一部分,或.NET 4.5库。

12
是否必须在请求之间处理HttpClient和HttpClientHandler?
.NET Framework 4.5中的System.Net.Http.HttpClient和System.Net.Http.HttpClientHandler实现IDisposable(通过System.Net.Http.HttpMessageInvoker)。 该using声明文件说: 通常,使用IDisposable对象时,应在using语句中声明并实例化它。 此答案使用以下模式: var baseAddress = new Uri("http://example.com"); var cookieContainer = new CookieContainer(); using (var handler = new HttpClientHandler() { CookieContainer = cookieContainer }) using (var client = new HttpClient(handler) { BaseAddress = baseAddress }) { var content = new FormUrlEncodedContent(new[] { new KeyValuePair<string, string>("foo", "bar"), new …

6
使用await / async时,HttpClient.GetAsync(...)从不返回
编辑: 这个问题看起来可能是相同的问题,但没有任何响应... 编辑:在测试用例5中,任务似乎停留在WaitingForActivation状态中。 我在.NET 4.5中使用System.Net.Http.HttpClient遇到了一些奇怪的行为-“等待”调用(例如)的结果httpClient.GetAsync(...)将永远不会返回。 仅在使用新的异步/等待语言功能和Tasks API的某些情况下会发生这种情况-仅使用延续时,代码似乎总是可以工作。 这是重现问题的一些代码-将其放入Visual Studio 11中的新“ MVC 4 WebApi项目”中,以暴露以下GET端点: /api/test1 /api/test2 /api/test3 /api/test4 /api/test5 <--- never completes /api/test6 此处的每个端点都返回相同的数据(来自stackoverflow.com的响应头),但/api/test5永远不会完成。 我是否在HttpClient类中遇到错误,还是我在某种程度上滥用了API? 复制代码: public class BaseApiController : ApiController { /// <summary> /// Retrieves data using continuations /// </summary> protected Task<string> Continuations_GetSomeDataAsync() { var httpClient = new HttpClient(); var …

4
为什么HttpClient BaseAddress不起作用?
考虑以下代码,其中BaseAddress定义了部分URI路径。 using (var handler = new HttpClientHandler()) using (var client = new HttpClient(handler)) { client.BaseAddress = new Uri("http://something.com/api"); var response = await client.GetAsync("/resource/7"); } 我希望这能向发出GET请求http://something.com/api/resource/7。但事实并非如此。 经过一番搜索,我找到了这个问题和答案:具有BaseAddress的HttpClient。建议将其放置/在末尾BaseAddress。 using (var handler = new HttpClientHandler()) using (var client = new HttpClient(handler)) { client.BaseAddress = new Uri("http://something.com/api/"); var response = await client.GetAsync("/resource/7"); } 它仍然不起作用。这里是文档:HttpClient.BaseAddress这是怎么回事?

2
如何为HttpClient PostAsync第二个参数设置HttpContent?
public static async Task<string> GetData(string url, string data) { UriBuilder fullUri = new UriBuilder(url); if (!string.IsNullOrEmpty(data)) fullUri.Query = data; HttpClient client = new HttpClient(); HttpResponseMessage response = await client.PostAsync(new Uri(url), /*expects HttpContent*/); response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json"); response.EnsureSuccessStatusCode(); string responseBody = await response.Content.ReadAsStringAsync(); return responseBody; } PostAsync需要另一个参数,该参数必须为HttpContent。 我该如何设置HttpContent?在任何地方都没有适用于Windows Phone 8的文档。 如果我这样做GetAsync,效果很好!但它必须是POST,其内容为key …

10
HttpClient不支持PostAsJsonAsync方法C#
我正在尝试从Web应用程序调用Web API。我正在使用.Net 4.5,并且在编写代码时遇到的错误HttpClient不包含定义PostAsJsonAsync方法。 下面是代码: HttpClient client = new HttpClient(); client.BaseAddress = new Uri("http://localhost:51093/"); client.DefaultRequestHeaders.Accept.Add( new MediaTypeWithQualityHeaderValue("application/json")); var user = new Users(); user.AgentCode = 100; user.Remarks = "Test"; user.CollectionDate = System.DateTime.Today; user.RemittanceDate = System.DateTime.Today; user.TotalAmount = 1000; user.OrgBranchID = 101; var response = client.PostAsJsonAsync("api/AgentCollection", user).Result; 我收到错误消息: 错误:“ System.Net.Http.HttpClient”不包含“ PostAsJsonAsync”的定义,并且找不到扩展方法“ PostAsJsonAsync”接受类型为“ System.Net.Http.HttpClient”的第一个参数(您是否缺少使用指令还是程序集引用?) …

7
在HttpClient和WebClient之间决定
我们的Web应用程序在.Net Framework 4.0中运行。UI通过ajax调用来调用控制器方法。 我们需要使用供应商提供的REST服务。我正在评估在.Net 4.0中调用REST服务的最佳方法。REST服务需要基本身份验证方案,并且可以返回XML和JSON格式的数据。无需上传/下载大量数据,以后也看不到任何东西。我查看了一些用于REST的开源代码项目,但没有发现任何有价值的项目来证明该项目中的其他依赖性。开始评估WebClient和HttpClient。我从NuGet下载了.Net 4.0的HttpClient。 我搜索了WebClient和之间的差异HttpClient,该站点提到单个HttpClient可以处理并发调用,并且可以重用已解析的DNS,cookie配置和身份验证。我还没有看到由于差异而可能获得的实用价值。 我进行了快速性能测试,以了解WebClient(同步调用),HttpClient(同步和异步)的性能。结果如下: HttpClient对所有请求使用同一实例(最小-最大) WebClient同步:8毫秒-167毫秒 HttpClient同步:3毫秒-7228毫秒 HttpClient异步:985-10405毫秒 HttpClient为每个请求使用一个新的(最小-最大) WebClient同步:4毫秒-297毫秒 HttpClient同步:3毫秒 -7953毫秒HttpClient异步:1027-10834毫秒 码 public class AHNData { public int i; public string str; } public class Program { public static HttpClient httpClient = new HttpClient(); private static readonly string _url = "http://localhost:9000/api/values/"; public static void Main(string[] …

6
HttpClient-任务已取消?
当有一个或两个任务时,它工作正常,但是当我们列出多个任务时,会引发错误“任务已取消”。 List<Task> allTasks = new List<Task>(); allTasks.Add(....); allTasks.Add(....); Task.WaitAll(allTasks.ToArray(), configuration.CancellationToken); private static Task<T> HttpClientSendAsync<T>(string url, object data, HttpMethod method, string contentType, CancellationToken token) { HttpRequestMessage httpRequestMessage = new HttpRequestMessage(method, url); HttpClient httpClient = new HttpClient(); httpClient.Timeout = new TimeSpan(Constants.TimeOut); if (data != null) { byte[] byteArray = Encoding.ASCII.GetBytes(Helper.ToJSON(data)); MemoryStream memoryStream …

6
为什么要使用HttpClient进行同步连接
我正在建立一个与API交互的类库。我需要调用API并处理XML响应。我可以看到使用HttpClient进行异步连接的好处,但是我正在做的事情纯粹是同步的,所以我看不出使用会有什么明显的好处HttpWebRequest。 如果有人能阐明任何想法,我将不胜感激。为此我不是使用新技术的人。


7
在WebAPI客户端中,每个调用创建一个新的HttpClient的开销是多少?
HttpClientWebAPI客户端的生存期应该是什么? 拥有HttpClient多个通话的实例更好吗? 创建和处理HttpClient每个请求的开销是多少,如以下示例所示(摘自http://www.asp.net/web-api/overview/web-api-clients/calling-a-web-api-from- a-net-client): using (var client = new HttpClient()) { client.BaseAddress = new Uri("http://localhost:9000/"); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); // New code: HttpResponseMessage response = await client.GetAsync("api/products/1"); if (response.IsSuccessStatusCode) { Product product = await response.Content.ReadAsAsync<Product>(); Console.WriteLine("{0}\t${1}\t{2}", product.Name, product.Price, product.Category); } }

3
将Http标头添加到HttpClient
所有: 在将请求发送到Web服务之前,我需要将HTTP标头添加到HttpClient中。我该如何针对单个请求(而不是对所有将来的请求使用HttpClient)?我不确定这是否可能。 var client = new HttpClient(); var task = client.GetAsync("http://www.someURI.com") .ContinueWith((taskwithmsg) => { var response = taskwithmsg.Result; var jsonTask = response.Content.ReadAsAsync<JsonObject>(); jsonTask.Wait(); var jsonObject = jsonTask.Result; }); task.Wait();

13
使用HttpClient进行Https调用
我一直在HttpClient使用C#进行WebApi调用。与相比,看起来整洁快捷WebClient。但是我在Https打电话时被困住了。 如何进行以下代码进行Https调用? HttpClient httpClient = new HttpClient(); httpClient.BaseAddress = new Uri("https://foobar.com/"); httpClient.DefaultRequestHeaders.Accept.Clear(); httpClient.DefaultRequestHeaders.Accept.Add( new MediaTypeWithQualityHeaderValue("application/xml")); var task = httpClient.PostAsXmlAsync<DeviceRequest>( "api/SaveData", request); 编辑1: 上面的代码可以很好地进行http调用。但是,当我将方案更改为https时,它不起作用。这是获得的错误: 基础连接已关闭:无法为SSL / TLS安全通道建立信任关系。 编辑2: 将方案更改为https是:第一步。 我如何提供证书和公钥/私钥以及C#请求。

6
使用httpClient.GetAsync时添加标题
我正在Windows Store应用程序项目中实现由Apiary.io的其他同事制作的API。 它们显示了我必须实现的方法示例: var baseAddress = new Uri("https://private-a8014-xxxxxx.apiary-mock.com/"); using (var httpClient = new HttpClient{ BaseAddress = baseAddress }) { using (var response = await httpClient.GetAsync("user/list{?organizationId}")) { string responseData = await response.Content.ReadAsStringAsync(); } } 在这种方法和其他方法中,我需要具有一个标头,该标头带有我之前获得的令牌。 这是邮递员(chrome扩展名)的图片,其中包含我正在谈论的标题: 如何将授权标头添加到请求中?

3
HttpClient可以安全同时使用吗?
在所有示例中,我都能找到的用法HttpClient,它用于一次关机。但是,如果我的客户持续存在这种情况,可以同时发出多个请求怎么办?基本上,client.PostAsync针对的同一实例立即调用2个线程是否安全HttpClient? 我不是在这里真正寻找实验结果。作为一个工作示例,可能只是simply幸(还有一个持久的persistent幸),而失败的示例可能是配置错误。理想情况下,我正在寻找有关HttpClient中并发处理问题的权威答案。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.