Questions tagged «dotnet-httpclient»

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

6
如何知道HttpClient何时超时?
据我所知,没有办法知道具体是发生了超时。我是不是在正确的地方寻找东西,还是缺少更大的东西? string baseAddress = "http://localhost:8080/"; var client = new HttpClient() { BaseAddress = new Uri(baseAddress), Timeout = TimeSpan.FromMilliseconds(1) }; try { var s = client.GetAsync("").Result; } catch(Exception e) { Console.WriteLine(e.Message); Console.WriteLine(e.InnerException.Message); } 返回: 发生一个或多个错误。 任务已取消。

4
HttpClient请求的自定义标头
如何在HttpClient请求中添加自定义标头?我正在使用PostAsJsonAsync发布JSON的方法。我需要添加的自定义标头是 "X-Version: 1" 到目前为止,这是我所做的: using (var client = new HttpClient()) { client.BaseAddress = new Uri("https://api.clickatell.com/"); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "xxxxxxxxxxxxxxxxxxxx"); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); var response = client.PostAsJsonAsync("rest/message", svm).Result; }

3
.Net 4.5中的异步HttpClient对于密集负载应用程序是否是错误的选择?
我最近创建了一个简单的应用程序来测试HTTP调用吞吐量,该应用程序可以以异步方式与传统的多线程方法生成。 该应用程序能够执行预定义数量的HTTP调用,最后显示执行它们所需的总时间。在我的测试期间,所有HTTP调用都对我的本地IIS服务器进行,​​他们检索了一个小的文本文件(大小为12个字节)。 下面列出了异步实现的代码中最重要的部分: public async void TestAsync() { this.TestInit(); HttpClient httpClient = new HttpClient(); for (int i = 0; i < NUMBER_OF_REQUESTS; i++) { ProcessUrlAsync(httpClient); } } private async void ProcessUrlAsync(HttpClient httpClient) { HttpResponseMessage httpResponse = null; try { Task<HttpResponseMessage> getTask = httpClient.GetAsync(URL); httpResponse = await getTask; Interlocked.Increment(ref _successfulCalls); } …

2
如何从httpclient调用中获取内容主体?
我一直在尝试弄清楚如何读取httpclient调用的内容,但似乎无法理解。我得到的响应状态是200,但是我不知道如何获得返回的实际Json,这就是我所需要的! 以下是我的代码: async Task<string> GetResponseString(string text) { var httpClient = new HttpClient(); var parameters = new Dictionary<string, string>(); parameters["text"] = text; Task<HttpResponseMessage> response = httpClient.PostAsync(BaseUri, new FormUrlEncodedContent(parameters)); return await response.Result.Content.ReadAsStringAsync(); } 我得到它只是从方法中调用它: Task<string> result = GetResponseString(text); 这就是我得到的 response Id = 89, Status = RanToCompletion, Method = "{null}", Result = "StatusCode: …

14
找不到System.Net.Http 4.2.0.0的奇怪问题
我有一个奇怪的问题,这使我发疯… 我有一个简单的类库项目(完整的.NET Framework,4.6.1),其中包含用于Cosmos DB功能的包装类。因此,我已经向该项目添加了“ Microsoft.Azure.DocumentDB” NuGet软件包1.19.1。除此之外,我还引用了“ Newtonsoft.Json” NuGet软件包10.0.3,以及一些“ Microsoft.Diagnostics.EventFlow。*” NuGet软件包。 到目前为止,所有内容均可正确编译。 但是,一旦我击中包装器类(从简单的Service Fabric无状态服务(完整的.NET Framework 4.6.1)中使用),并尝试执行以下代码行: _docClient = new DocumentClient(new Uri(cosmosDbEndpointUrl), cosmosDbAuthKey); 我在运行时收到这个奇怪的错误: 发生System.IO.FileNotFoundException HResult = 0x80070002 消息=无法加载文件或程序集'System.Net.Http,版本= 4.2.0.0,区域性=中性,PublicKeyToken = b03f5f7f11d50a3a'或其依赖项之一。该系统找不到指定的文件。 Source = StackTrace:在Microsoft.Azure.Documents.Client.DocumentClient.Initialize(Uri 1 desiredConsistencyLevel) at Microsoft.Azure.Documents.Client.DocumentClient..ctor(Uri serviceEndpoint, String authKeyOrResourceToken, ConnectionPolicy connectionPolicy, NullableserviceEndpoint ,ConnectionPolicy connectionPolicy,可为1的requiredConsistencyLevel) 内部异常1:FileNotFoundException:无法加载文件或程序集'System.Net.Http,Version = 4.0.0.0,Culture = neutral,PublicKeyToken …

3
.net 4.5中使用HttpClient努力使Cookie脱颖而出
我有以下代码可以成功运行。我不知道如何从响应中获取cookie。我的目标是我希望能够在请求中设置cookie并从响应中获取cookie。有什么想法吗? private async Task<string> Login(string username, string password) { try { string url = "http://app.agelessemail.com/account/login/"; Uri address = new Uri(url); var postData = new List<KeyValuePair<string, string>> { new KeyValuePair<string, string>("username", username), new KeyValuePair<string, string>("password ", password) }; HttpContent content = new FormUrlEncodedContent(postData); var cookieJar = new CookieContainer(); var handler = …

3
HttpClient中带有await的异步调用永远不会返回
我正在C#Win8 CP上的一个基于xaml的Metro应用程序中打个电话。此调用仅命中Web服务并返回JSON数据。 HttpMessageHandler handler = new HttpClientHandler(); HttpClient httpClient = new HttpClient(handler); httpClient.BaseAddress = new Uri("http://192.168.1.101/api/"); var result = await httpClient.GetStreamAsync("weeklyplan"); DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(WeeklyPlanData[])); return (WeeklyPlanData[])ser.ReadObject(result); 它挂在,await但http调用实际上几乎立即返回(通过提琴手确认);好像await被忽略了,就挂在那里。 询问之前 -是-专用网络功能已打开。 任何想法为什么会挂起?

4
如何将对象传递给HttpClient.PostAsync并序列化为JSON主体?
我正在使用System.Net.Http,在网上找到了几个示例。我设法创建此代码以发出POST请求: public static string POST(string resource, string token) { using (var client = new HttpClient()) { client.BaseAddress = new Uri(baseUri); client.DefaultRequestHeaders.Add("token", token); var content = new FormUrlEncodedContent(new[] { new KeyValuePair<string, string>("", "") }); var result = client.PostAsync("", content).Result; string resultContent = result.Content.ReadAsStringAsync().Result; return resultContent; } } 一切正常。但是假设我想将第三个参数传递给该POST方法,则该参数称为data。数据参数是这样的对象: object data = …

4
如何从HttpRequestException获取StatusCode?
我可能在这里缺少明显的东西。 我正在使用Message字符串中包含的HttpClient引发。HttpRequestExceptionStatusCode 我该如何访问StatusCode呢? 编辑:更多信息,我急着写了这个问题。 我HttpClient用来访问WebApi项目中的另一个API。是的,我知道为什么要打电话EnsureSuccessStatusCode()。我想向下游传播一些错误,例如404和403。 我想要的是始终如一地转换HttpRequestException为HttpResponseException使用custom ExceptionFilterAttribute。 不幸的是,HttpRequestException除了消息之外,我没有任何其他可用的信息。我希望以StatusCode原始(int或枚举)形式发现。 看起来我可以: 使用该消息切换状态代码(正常) 或创建我的SecureSuccessStatusCode版本并引发实际上可用的异常。

6
添加HttpClient标头会生成带有某些值的FormatException
这是在针对Google Cloud Messaging进行编码的情况下发生的,但在其他地方也适用。 考虑以下: var http = new HttpClient(); http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("key=XXX"); 和 var http = new HttpClient(); http.DefaultRequestHeaders.Add("Authorization", "key=XXX"); 两者都生成FormatException: System.FormatException:值key = XXX'的格式无效。 解决方法是删除等号。 深入了解反射器表明,添加新的标头值时会运行大量的验证和解析代码。为什么这一切都是必要的?这个客户难道不应该躲开我们吗? 如何逃避等号,以便成功添加此值?

1
具有不同身份验证标头的HttpClient单个实例
鉴于.net HttpClient在设计时考虑了重用,并且旨在长期存在,并且在短期实例中已报告内存泄漏。在为多个用户调用端点时,要使用不同的承载令牌(或任何授权标头)对给定端点进行静态调用的地方有哪些指导方针? private void CallEndpoint(string resourceId, string bearerToken) { httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("bearer", bearerToken); var response = await httpClient.GetAsync($"resource/{resourceid}"); } 鉴于上述代码可以由Web应用程序上的任意数量的线程调用,因此很可能第一行中设置的标头与调用资源时使用的标头不同。 在不使用锁引起争用和维护无状态Web应用程序的情况下,为单个端点创建和部署HttpClient的推荐方法是什么(我目前的做法是为每个端点创建单个客户端)? 生命周期 尽管HttpClient确实间接实现了IDisposable接口,但是HttpClient的推荐用法是不要在每次请求后都将其丢弃。只要您的应用程序需要发出HTTP请求,HttpClient对象就可以存在。在多个请求中都存在一个对象,这为设置DefaultRequestHeaders提供了空间,并且使您不必像HttpWebRequest那样在每个请求中都重新指定诸如CredentialCache和CookieContainer之类的内容。

3
使用.NET 4.0任务模式使用HTTPClient .ReadAsAsync将JSON反序列化为数组或列表
我正在尝试反序列化http://api.usa.gov/jobs/search.json?query=nursing+jobs使用.NET 4.0任务模式返回的JSON 。它将返回此JSON(“加载JSON数据” @ http://jsonviewer.stack.hu/)。 [ { "id": "usajobs:353400300", "position_title": "Nurse", "organization_name": "Indian Health Service", "rate_interval_code": "PA", "minimum": 42492, "maximum": 61171, "start_date": "2013-10-01", "end_date": "2014-09-30", "locations": [ "Gallup, NM" ], "url": "https://www.usajobs.gov/GetJob/ViewDetails/353400300" }, { "id": "usajobs:359509200", "position_title": "Nurse", "organization_name": "Indian Health Service", "rate_interval_code": "PA", "minimum": 42913, "maximum": 61775, "start_date": "2014-01-16", …


3
在HttpClient中解压缩之前是否可以访问压缩数据?
我正在使用Google Cloud Storage .NET客户端库。有三种功能(.NET,我的客户端库和存储服务之间)以不愉快的方式结合在一起: 下载文件(Google Cloud Storage术语中的对象)时,服务器会包含已存储数据的哈希值。然后,我的客户代码会根据下载的数据来验证该哈希。 Google云端存储的另一个功能是,用户可以设置对象的Content-Encoding,并且当请求包含匹配的Accept-Encoding时,该对象将作为下载的标头包含在内。(目前,让我们忽略请求中不包含的行为...) HttpClientHandler 可以自动透明地解压缩gzip(或压缩)内容。 当所有这三个结合在一起时,我们就会遇到麻烦。这是一个简短但完整的程序,演示了这一点,但是没有使用我的客户端库(并且没有访问可公开访问的文件): using System; using System.Linq; using System.Net; using System.Net.Http; using System.Security.Cryptography; using System.Text; using System.Threading.Tasks; class Program { static async Task Main() { string url = "https://www.googleapis.com/download/storage/v1/b/" + "storage-library-test-bucket/o/gzipped-text.txt?alt=media"; var handler = new HttpClientHandler { AutomaticDecompression = DecompressionMethods.GZip }; var …

3
如何使用HttpClient发布数据?
我从Nuget获得了这个HttpClient。 当我想获取数据时,可以这样: var response = await httpClient.GetAsync(url); var data = await response.Content.ReadAsStringAsync(); 但是问题是我不知道如何发布数据?我必须发送一个发布请求,并在其中发送以下值:comment="hello world"和questionId = 1。我不知道这些可以是类的属性。 更新我不知道如何将这些值添加到HttpContent后方法需要它。httClient.Post(string, HttpContent);
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.