Tag: dotnet httpclient

C#httpClient(用于异步调用的块)死锁

现在的情况 有一个客户端通过HttpClient.GetAsync执行get请求。 不幸的是,出于某种原因,我们需要阻止这些电话。 为了做到这一点,使用这个Asynchelper类是为了避免上下文切换死锁(而不仅仅是使用.Result) public static class AsyncHelper { private static readonly TaskFactory _myTaskFactory = new TaskFactory(CancellationToken.None, TaskCreationOptions.None, TaskContinuationOptions.None, TaskScheduler.Default); public static void RunSync(Func func) { AsyncHelper._myTaskFactory .StartNew(func) .Unwrap() .GetAwaiter() .GetResult(); } } 然后实际调用如下所示: AsyncHelper.RunSync(Async Function() Await _httpClient.GetAsync(uri, HttpCompletionOption.ResponseHeadersRead)) 问题 在使用Netlimiter降低网络速度的压力测试期间,我们遇到了未完成的请求的问题。 例如,当我终止网络连接时(在NetLimiter中),这样的请求将永远留在客户端。 它将保留在AsyncHelper.RunSync调用中,直到它进入httpClient.Timeout。 当连接丢失时,是否应该有一个例外结束此呼叫? 我错过了什么吗?

如何在JIRA中使用REST api创建问题?

我正在使用我的json数据向JIRA发送POST请求以创建项目,但我无法创建一个项目到JIRA,我试图从Fiddler看到错误,我得到了跟随错误。 我正在使用C#并为它创建了控制台应用程序。 我发布的我的JSON数据如下。 { “fields”: { “project”: { “key”: “JTL” }, “issuetype”: { “name”: “BUG” } } } 错误消息如下: {“errorMessages”:[],“errors”:{“issuetype”:“问题类型是必需的”}} 我从以下代码发布json数据,请提出我错在哪里和哪里? string data=@”{“fields”:{“project”:{“key”:”JTL”},”issuetype”:{“name”:”BUG”}}}”; //object of HttpClient. HttpClient client = new HttpClient(); //Putting URI in client base address. client.BaseAddress = new Uri(uri); //Putting the credentials as bytes. byte[] cred = UTF8Encoding.UTF8.GetBytes(“jiraUserName” + “:” + “JiraPassword”); //Putting […]

将图像从Web保存到Windows Phone 8.1 RT C#中的“保存的图片”文件夹

如何将图像保存到Windows Phone 8.1 RT中的“已保存图片”文件夹? 我使用HttpClient从网上下载了图像。

使用HttpMethod的自定义值

我正在使用HttpClient ,我需要为HttpMethod设置一个非标准类型。 使用HttpWebRequest只需要一个字符串, HttpClient需要一个HttpMethod 。 枚举HttpMethod的可用值,我没有看到添加自定义值的方法。 有什么想法吗?

我应该创建多少个HttpClient?

最初我的代码在每个请求的using语句中创建了一个新的HttpClient。 然后我读了几篇关于重用HttpClient来提高性能的文章。 以下是一篇此类文章的摘录: 我不建议在Using块中创建HttpClient来发出单个请求。 当HttpClient被释放时,它也会导致底层连接被关闭。 这意味着下一个请求必须重新打开该连接。 您应该尝试重用HttpClient实例。 http://www.bizcoder.com/httpclient-it-lives-and-it-is-glorious 在我看来,如果连续多个请求到达相同的位置 – 例如www.api1.com,那么保持连接打开只会有用。 我的问题是,我应该如何创建HttpClients? 我的网站在后端讨论了大约十种不同的服务。 我应该为他们所有人使用单个HttpClient创建,还是应该在后端使用每个域创建一个单独的HttpClient? 示例:如果我与www.api1.com和www.api2.com交谈,我应该创建2个不同的HttpClient,还是只创建一个HttpClient?

HttpClient PCL Cookie未应用于请求

我正在使用.NET HttpClient for PCL(2.2.15)来跨Windows Phone 8,Windows 8和.NET 4.5的公共库。 但是,我没有看到cookie被应用于请求。 我正在使用以下代码设置HttpClient和HttpClientHandler。 HttpClient是包装类的属性。 CookieContainer = new CookieContainer(); var handler = new HttpClientHandler { AllowAutoRedirect = true, CookieContainer = CookieContainer, Credentials = client.CredentialCache, UseCookies = true, AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip }; HttpClient = new HttpClient(handler, false); 使用以下内容发送请求。 var response = await HttpClient.SendAsync(httpRequestMessage); 当我在Debug中单步执行时,我能够查看处理程序上的CookieContainer,并且能够看到我正在使用预期cookie进行反对的域的CookieContainer。 Cookie具有以下值: 路径=’/’ Domain =’。staging3.api.com’ […]

无法找到WebClient

我已经在Stack Overflow(和谷歌)上搜索,但找不到解决我问题的具体答案。 我想从页面中读取一些内容。 我试过使用Webclient ,但这给了我这个错误: 找不到类型或命名空间名称’WebClient’(您是否缺少using指令或程序集引用?) 我试图在谷歌搜索如何解决这个错误,但没有找到正确的答案(我也尝试过HttpClient ,同样的结果)。 我如何确保获取其特定页面的内容? 顺便说一下,这就是我现在所拥有的: WebClient client = new WebClient(); // Use google as test page string downloadString = client.DownloadString(“http://www.gooogle.com”); 我正在使用Visual Studio 2015社区和ASP.Net v5

设置超时时HttpClient挂起(Windows Phone)

我正在尝试在Windows Phone App中将超时设置为HttpClient对象。 但是如果在超时之前未完成请求,则GetAsync永远不会返回值。 我正在使用以下代码来获得响应: HttpClientHandler handler = new HttpClientHandler(); HttpClient client = new HttpClient(handler); client.Timeout = TimeSpan.FromSeconds(5); client.BaseAddress = new Uri(“http://www.foo.com”); HttpResponseMessage response = await client.GetAsync(“/boo.mp3”);//<–Hangs byte[] data = await response.Content.ReadAsByteArrayAsync(); 如何正确设置超时以从GetAsync获取结果?

为什么HttpClient似乎在这里死锁?

我有一个在便携式类库中制作的API,需要使用特定于平台的API来发送HTTP请求。 这是我写的在WinRT上执行HTTP POST的方法: public bool Post(IEnumerable<KeyValuePair> headers, string data) { bool success = false; HttpClient client = new HttpClient(new HttpClientHandler {AllowAutoRedirect = false}); foreach (var header in headers) { client.DefaultRequestHeaders.Add(header.Key, header.Value); } try { var task=client.PostAsync(endpoint, new StringContent(data, Encoding.UTF8, “text/xml”)).ContinueWith( postTask => { try { postTask.Wait(client.Timeout); //Don’t wait longer than the client timeout. success = […]

如何使用HttpClient从特定IP地址发送请求? C#

我在服务器上有多个IP,并希望在使用HttpClient类从API获取/发布数据时选择我想要使用的IP。 (或甚至同时发送请求但使用2个IP而不仅仅是一个) 我已经看到一些使用HttpWebRequest( 这里 )的例子,它使用了委托,但我想继续使用HttpClient实现。