ホームページ > バックエンド開発 > C++ > C# で REST API 呼び出しを行うときに例外を適切に処理する方法

C# で REST API 呼び出しを行うときに例外を適切に処理する方法

DDD
リリース: 2025-01-25 14:36:11
オリジナル
489 人が閲覧しました

How to Properly Handle Exceptions When Making REST API Calls in C#?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート