คำถามติดแท็ก dotnet-httpclient

หมายถึงไลบรารี System.Net.Http.HttpClient ซึ่งเป็นส่วนหนึ่งของแพ็คเกจ HttpClient บน NuGet หรือไลบรารี. NET 4.5

12
HttpClient และ HttpClientHandler ต้องถูกกำจัดระหว่างการร้องขอหรือไม่?
System.Net.Http.HttpClientและSystem.Net.Http.HttpClientHandlerใน. NET Framework 4.5 ใช้ IDisposable (ผ่านSystem.Net.Http.HttpMessageInvoker ) usingเอกสารคำสั่งพูดว่า: ตามกฎแล้วเมื่อคุณใช้วัตถุ IDisposable คุณควรประกาศและสร้างอินสแตนซ์ในข้อความสั่งการใช้ คำตอบนี้ใช้รูปแบบนี้: 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 …

6
HttpClient.GetAsync (…) จะไม่กลับมาเมื่อใช้ await / async
แก้ไข: คำถามนี้ดูเหมือนว่าอาจเป็นปัญหาเดียวกัน แต่ไม่มีคำตอบ ... แก้ไข:ในกรณีทดสอบ 5 งานดูเหมือนจะติดอยู่ในWaitingForActivationสถานะ ฉันพบพฤติกรรมแปลก ๆ บางอย่างโดยใช้ System.Net.Http.HttpClient ใน. NET 4.5 - ที่ "รอ" ผลการโทรไปที่ (เช่น) httpClient.GetAsync(...)จะไม่กลับมา สิ่งนี้จะเกิดขึ้นในบางสถานการณ์เมื่อใช้ฟังก์ชันการทำงานของ async / await ใหม่และ Tasks API - รหัสดูเหมือนจะทำงานเมื่อใช้ต่อเนื่องเท่านั้น นี่คือโค้ดบางส่วนที่ทำให้เกิดปัญหาอีกครั้ง - วางสิ่งนี้ลงใน "MVC 4 WebApi โครงการใหม่" ใน Visual Studio 11 เพื่อแสดงปลายทาง GET ต่อไปนี้: /api/test1 /api/test2 /api/test3 /api/test4 /api/test5 <--- never …

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แต่มันก็ไม่ได้ หลังจากบางค้นหาฉันคิดว่าคำถามนี้และคำตอบ: HttpClient กับ BaseAddress ข้อเสนอแนะคือการสถานที่ในตอนท้ายของ/BaseAddress using (var handler = new HttpClientHandler()) using (var client = new HttpClient(handler)) { client.BaseAddress = new …

2
ฉันจะตั้งค่า HttpContent สำหรับพารามิเตอร์ที่สอง HttpClient PostAsync ของฉันได้อย่างไร
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; } ใช้เวลาพารามิเตอร์อื่นที่จะต้องมีPostAsyncHttpContent ฉันจะตั้งค่าได้HttpContentอย่างไร ไม่มีเอกสารใด ๆ ที่ใช้งานได้กับ …

10
HttpClient ไม่รองรับวิธี PostAsJsonAsync C #
ฉันพยายามโทรหาเว็บ 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; และฉันได้รับข้อความแสดงข้อผิดพลาด: ข้อผิดพลาด: …

7
การตัดสินใจระหว่าง HttpClient และ WebClient
เว็บแอปของเรากำลังทำงานใน. Net Framework 4.0 UI เรียกวิธีควบคุมผ่านการเรียก ajax เราจำเป็นต้องใช้บริการ REST จากผู้ขายของเรา ฉันกำลังประเมินวิธีที่ดีที่สุดในการเรียกใช้บริการ REST ใน. Net 4.0 เซอร์วิส REST ต้องการ Basic Authentication Scheme และสามารถส่งคืนข้อมูลทั้งใน XML และ JSON ไม่มีข้อกำหนดสำหรับการอัปโหลด / ดาวน์โหลดข้อมูลขนาดใหญ่และฉันไม่เห็นอะไรเลยในอนาคต ฉันดูโครงการโอเพนซอร์สสองสามโครงการสำหรับการใช้ REST และไม่พบค่าใด ๆ ในการพิสูจน์การพึ่งพาเพิ่มเติมในโครงการ เริ่มต้นในการประเมินและWebClient HttpClientฉันดาวน์โหลด HttpClient สำหรับ. Net 4.0 จาก NuGet ผมค้นหาความแตกต่างระหว่างWebClientและHttpClientและเว็บไซต์นี้บอกว่าเดียว HttpClient สามารถจัดการกับสายพร้อมกันและสามารถใช้การแก้ไข DNS, การตั้งค่าคุกกี้และการตรวจสอบ ฉันยังไม่เห็นค่าจริงที่เราอาจได้รับเนื่องจากความแตกต่าง ฉันทำการทดสอบประสิทธิภาพอย่างรวดเร็วเพื่อค้นหาว่าWebClient(การเรียกสาย), HttpClient(ซิงค์และ async) …

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 = …

6
ทำไมต้องใช้ HttpClient สำหรับการเชื่อมต่อแบบซิงโครนัส
ฉันกำลังสร้างไลบรารีคลาสเพื่อโต้ตอบกับ API ฉันต้องเรียก API และประมวลผลการตอบสนอง XML ผมสามารถมองเห็นประโยชน์ของการใช้HttpClientสำหรับการเชื่อมต่อไม่ตรงกัน แต่สิ่งที่ฉันกำลังทำคือการซิงโครหมดจดดังนั้นฉันไม่สามารถเห็นประโยชน์ใด ๆ HttpWebRequestที่สำคัญมากกว่าการใช้ หากใครสามารถหลั่งน้ำตาแสงใด ๆ ฉันจะขอบคุณมันมาก ฉันไม่ใช่คนเดียวที่ใช้เทคโนโลยีใหม่เพื่อประโยชน์ของมัน

5
.NET HttpClient วิธีการโพสต์ค่าสตริง?
ฉันจะสร้างโดยใช้ C # และ HttpClient ตามคำขอ POST ต่อไปนี้ได้อย่างไร: ฉันต้องการคำขอดังกล่าวสำหรับบริการ WEB API ของฉัน: [ActionName("exist")] [HttpPost] public bool CheckIfUserExist([FromBody] string login) { return _membershipProvider.CheckIfExist(login); }

7
ค่าใช้จ่ายในการสร้าง HttpClient ใหม่ต่อการโทรหนึ่งครั้งในไคลเอนต์ WebAPI คืออะไร
สิ่งที่ควรเป็นHttpClientอายุการใช้งานของไคลเอนต์ WebAPI มันจะดีกว่าถ้ามีอินสแตนซ์หนึ่ง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 Headers ให้กับ HttpClient
ทั้งหมด: ฉันต้องเพิ่มส่วนหัว 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
โทร Https โดยใช้ HttpClient
ฉันใช้HttpClientสำหรับการโทรผ่าน WebApi ด้วย C # 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 คือ: ขั้นตอนที่หนึ่ง ฉันจะจัดหาใบรับรอง & คีย์สาธารณะ / …

6
การเพิ่มส่วนหัวเมื่อใช้ httpClient.GetAsync
ฉันกำลังใช้ API ที่สร้างโดยเพื่อนร่วมงานคนอื่นกับ Apiary.io ในโครงการแอพ Windows Store พวกเขาแสดงตัวอย่างของวิธีการที่ฉันต้องใช้: 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หัวข้อในครั้งเดียวกับอินสแตนซ์เดียวกันของ ฉันไม่ได้มองหาผลการทดลองที่นี่ ในฐานะที่เป็นตัวอย่างการทำงานอาจเป็นเรื่องบังเอิญ (และตัวอย่างที่ยังคงอยู่) และตัวอย่างที่ล้มเหลวอาจเป็นปัญหาการกำหนดค่าที่ผิดพลาด เป็นการดีที่ฉันกำลังมองหาคำตอบที่มีสิทธิ์สำหรับคำถามของการจัดการภาวะพร้อมกันใน HttpClient

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; }

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.