ホームページ > バックエンド開発 > C++ > C#を使用してREST APIを消費し、潜在的な例外を処理するにはどうすればよいですか?

C#を使用してREST APIを消費し、潜在的な例外を処理するにはどうすればよいですか?

Linda Hamilton
リリース: 2025-01-25 14:57:11
オリジナル
889 人が閲覧しました

How Can I Use C# to Consume REST APIs and Handle Potential Exceptions?

C# REST API 呼び出しメソッド

RESTful Web API ノート

RESTful Web API を使用する場合、古い WCF Web API が ASP.NET Web API に置き換えられていることに注意することが重要です。 RESTful サービスを使用するには、Microsoft ASP.NET Web API クライアント ライブラリを使用することをお勧めします。

C# での REST API 呼び出しの作成

以下は、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语句确保HttpClient被正确释放
            {
                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("{0} ({1})", (int)response.StatusCode, response.ReasonPhrase);
                    }
                }
                catch (HttpRequestException e)
                {
                    Console.WriteLine($"HTTP请求异常:{e.Message}");
                }
                catch (Exception e)
                {
                    Console.WriteLine($"发生异常:{e.Message}");
                }
            }
        }
    }
}</code>
ログイン後にコピー

例外処理

前に提供したコードでは、例外処理ブロックが機能しないことに気づいたかもしれません。これは、WebException がスローされないためです。 ASP.NET Web API クライアント ライブラリを使用すると、例外が HttpRequestException としてスローされます。

新しいライブラリを使用して例外を処理するには、次のような try-catch ブロックを使用できます。

<code class="language-csharp">try
{
    // 在此处进行请求
}
catch (HttpRequestException e)
{
    // 在此处处理异常
}
catch (Exception e) // 捕获更通用的异常
{
    // 处理其他类型的异常
}</code>
ログイン後にコピー

改善点: using ステートメントを使用して、リソース リークを回避するために HttpClient が正しく解放されるようにしました。ブロックされた GetAsync 呼び出しを非同期メソッドに置き換えて、ExceptionBase を含む、より包括的な例外処理を追加しました。クラスを使用して、より多くの種類の例外をキャッチし、より明確な例外情報出力を提供します。 このコードは、ienumerable のスペル ミスも修正します。

以上がC#を使用してREST APIを消費し、潜在的な例外を処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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