Amalan terbaik panggilan API REST di API REST di C#
Pengenalan
Artikel ini membincangkan cara memanggil API REST dalam C#dan menyelesaikan masalah blok tidak normal yang tidak terkatakan.
kod asal dan masalah
Kod asal menggunakan kelas untuk menghantar permintaan pos ke API REST. Walau bagaimanapun, blok yang tidak normal seolah -olah dilangkau, mengakibatkan mesej ralat tidak dapat dipaparkan.
Menggunakan Pelan Penambahbaikan Perpustakaan API Web API ASP.NET HttpWebRequest
Pelan penambahbaikan ini menggunakan kelas
, memudahkan proses menggunakan perkhidmatan berasaskan HTTP dan respons pemprosesan. Ia mengandungi rawatan yang tidak normal dan penggunaanuntuk memastikan bahawa contoh
dibebaskan dengan betul. Penggunaan kaedah asynchronous juga mengelakkan pengaturcaraan. Output maklumat ralat yang lebih jelas ditambah ke kod, dan disyorkan untuk melakukan pemprosesan ralat peringkat yang lebih tinggi.<code class="language-csharp">using System; using System.Collections.Generic; using System.Net.Http; using System.Net.Http.Headers; namespace ConsoleProgram { public class DataObject { public string Name { get; set; } } public class Class1 { private const string URL = "https://sub.domain.com/objects.json"; private string urlParameters = "?api_key=123"; static void Main(string[] args) { using (HttpClient client = new HttpClient()) // 使用using语句自动释放资源 { client.BaseAddress = new Uri(URL); // 添加JSON格式的Accept头。 client.DefaultRequestHeaders.Accept.Add( new MediaTypeWithQualityHeaderValue("application/json")); try { // 获取数据响应。 使用异步方法避免阻塞 var response = client.GetAsync(urlParameters).Result; if (response.IsSuccessStatusCode) { // 解析响应正文。 var dataObjects = response.Content.ReadAsAsync<IEnumerable<DataObject>>().Result; foreach (var d in dataObjects) { Console.WriteLine("{0}", d.Name); } } else { Console.WriteLine($"HTTP请求失败: 状态码 {(int)response.StatusCode} - {response.ReasonPhrase}"); // 更高级的错误处理,例如记录日志或抛出自定义异常 } } catch (HttpRequestException ex) { Console.WriteLine($"HTTP请求异常: {ex.Message}"); // 更高级的错误处理,例如记录日志或显示用户友好的错误信息 } catch (Exception ex) { Console.WriteLine($"发生未知异常: {ex.Message}"); // 记录日志或显示用户友好的错误信息 } } } } }</code>
<:> nota: HttpClient
using
HttpClient
Adalah disyorkan untuk menggunakan semula
Ikuti "Mode Bubur". Amalan terbaik ialah menggunakan pernyataan atau melepaskan pelanggan secara manual selepas semua permintaan selesai. Pernyataan telah digunakan dalam contoh ini.
HttpClient
Atribut akan menyekat sehingga operasi tak segerak selesai, tetapi gabungan blok HttpClient
using
Jawapan yang disiarkan ini memberikan penyelesaian yang lebih mantap dan cekap, menangani pengecualian yang berpotensi dan memperbaiki peningkatan yang menarikAtas ialah kandungan terperinci Bagaimana Mengendalikan Pengecualian Dengan Betul Semasa Membuat Panggilan API REST dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!