Maison > développement back-end > C++ > Comment puis-je utiliser C # pour consommer des API REST et gérer les exceptions potentielles?

Comment puis-je utiliser C # pour consommer des API REST et gérer les exceptions potentielles?

Linda Hamilton
Libérer: 2025-01-25 14:57:11
original
888 Les gens l'ont consulté

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

Méthode d'appel de l'API REST C#

Remarques sur l'API Web RESTful

Lors de l'utilisation de l'API Web RESTful, il est important de noter que l'ancienne API Web WCF a été remplacée par l'API Web ASP.NET. Afin d'utiliser les services RESTful, Microsoft recommande d'utiliser la bibliothèque cliente Microsoft ASP.NET Web API.

Création d'appels API REST en C#

Ce qui suit est un exemple mis à jour utilisant la bibliothèque cliente de l'API Web ASP.NET :

<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>
Copier après la connexion

Gestion des exceptions

Dans le code que vous avez fourni plus tôt, vous avez peut-être remarqué que le bloc de gestion des exceptions ne fonctionne pas. C'est parce que l'exception WebException n'est pas levée. Lors de l'utilisation de la bibliothèque cliente de l'API Web ASP.NET, les exceptions sont levées sous la forme HttpRequestException.

Pour gérer les exceptions à l'aide de la nouvelle bibliothèque, vous pouvez utiliser un bloc try-catch comme celui-ci :

<code class="language-csharp">try
{
    // 在此处进行请求
}
catch (HttpRequestException e)
{
    // 在此处处理异常
}
catch (Exception e) // 捕获更通用的异常
{
    // 处理其他类型的异常
}</code>
Copier après la connexion

Améliorations : utilisation de l'instruction using pour garantir que HttpClient est libéré correctement afin d'éviter les fuites de ressources ; remplacement des appels GetAsync bloqués par des méthodes asynchrones pour améliorer l'efficacité du programme, ajout d'une gestion des exceptions plus complète, y compris ExceptionBase ; classe pour détecter plus de types d’exceptions et fournir une sortie d’informations d’exception plus claire. Le code corrige également la faute d'orthographe de ienumerable.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal