C# での REST API 呼び出しのベスト プラクティス
はじめに
この記事では、C# で REST API を呼び出す方法について説明し、例外ブロックが実行されない問題を解決し、現在の ASP.NET Web API クライアント ライブラリを使用した改善されたソリューションを提供します。
元のコードと問題点
元のコードは、HttpWebRequest
クラスを使用して REST API への POST リクエストを作成します。ただし、例外ブロックがバイパスされているように見えるため、エラー メッセージが表示されません。
ASP.NET Web API クライアント ライブラリを使用した改善されたソリューション
Microsoft は現在、RESTful サービスを使用するために ASP.NET Web API クライアント ライブラリを使用することを推奨しています。指定されたコードの改善点は次のとおりです:
<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>
この改善では、HttpClient
クラスを使用して、HTTP ベースのサービスを使用し、応答を処理するプロセスを簡素化します。これには明示的な例外処理が含まれており、using
ステートメントを使用して HttpClient
インスタンスが正しく解放されるようにします。 非同期メソッドを使用すると、プログラムのブロックも回避されます。 より明確なエラー メッセージ出力がコードに追加され、より高度なエラー処理が推奨されます。
注:
HttpClient
インスタンスを再利用することをお勧めします。 HttpClient
クラスは「破棄パターン」に従います。ベストプラクティスは、using
ステートメントを使用するか、すべてのリクエストが完了した後にクライアントを手動で解放することです。 この例では using
ステートメントが使用されています。 GetAsync
) を使用すると、プログラムのパフォーマンスが向上し、メインスレッドのブロックを回避できます。 Result
属性は非同期操作が完了するまでブロックしますが、try-catch
ブロックと組み合わせることで、より効率的な例外処理が可能になります。 この改訂された回答は、潜在的な例外に対処し、using
と明示的なエラー処理の使用によりコードの信頼性が向上し、より堅牢で効率的なソリューションを提供します。
以上がC# で REST API 呼び出しを行うときに例外を適切に処理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。