Maison > développement back-end > C++ > Comment gérer correctement les exceptions lors des appels d'API REST en C# ?

Comment gérer correctement les exceptions lors des appels d'API REST en C# ?

DDD
Libérer: 2025-01-25 14:36:11
original
489 Les gens l'ont consulté

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

La meilleure pratique de l'API REST Call dans l'API REST dans le C #

Introduction

Cet article examine comment appeler l'API REST en C # et résoudre le problème des blocs anormaux indépendants.

Code et problèmes d'origine

Le code d'origine utilise la classe pour envoyer une demande de message à l'API REST. Cependant, le bloc anormal semble être contourné, ce qui entraîne des messages d'erreur ne peut pas être affiché.

Utilisation du plan d'amélioration de la bibliothèque client ASP.NET API ASP.NET

HttpWebRequest

Microsoft est actuellement recommandé d'utiliser la bibliothèque client ASP.NET Web API pour utiliser le service Restful. Ce qui suit est un plan d'amélioration pour le code donné:

Ce plan d'amélioration utilise la classe

, simplifiant le processus d'utilisation des services basés sur HTTP et de la réponse de traitement. Il contient un traitement anormal explicite et utilise des instructions

pour s'assurer que l'instance

est correctement libérée. L'utilisation de méthodes asynchrones évite également la programmation. Une sortie d'informations d'erreur plus claire est ajoutée au code, et il est recommandé d'effectuer un traitement d'erreur de niveau supérieur.
<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>
Copier après la connexion

Remarque: HttpClient using HttpClient

Il est recommandé de réutiliser les instances

pour plusieurs demandes. Suivez le "Mode Disser". La meilleure pratique consiste à utiliser l'instruction

ou à libérer manuellement le client une fois toutes les demandes terminées. L'instruction a été utilisée dans cet exemple.
  • L'utilisation de méthodes asynchrones (HttpClient) peut améliorer les performances du programme et éviter de bloquer le thread principal.
  • L'attribut bloquera jusqu'à ce que l'opération asynchrone soit terminée, mais la combinaison de blocs
  • peut gérer plus efficacement les anomalies. HttpClient using using Cette réponse révisée fournit une solution plus robuste et efficace, abordant les exceptions potentielles et l'amélioration de la mobilisation de la consultation de la consultation de l’intégration de l’intégration de l’intégration de l’intégration

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal