Code d’aide de l’API web : Classe CrmHttpResponseException
Utilisez la classe CrmHttpResponseException pour représenter les erreurs d’état HTTP générées lors d’appels de l’API web Dynamics 365 for Customer Engagement. Cette classe est dérivée de la classe .NET System.Exception standard pour s’intégrer facilement dans vos mécanismes de gestion des exceptions existants. Pour des informations plus générales, voir Gestion et renvoi d'exceptions.
La classe CrmHttpResponseException se situe dans le fichier Exceptions.cs de la Bibliothèque d’aide de l’API web du Kit de développement logiciel (SDK) CRM. Il est utilisé régulièrement dans les autres classes de bibliothèques d’aide et exemples de l’API web C#. Pour plus d’informations, voir Utiliser la bibliothèque d’aide de l’API Web Dynamics 365 Customer Engagement (C#).
Cette classe utilise la fonctionnalité de gestion de chaîne JSON de la bibliothèque open source Json.NET.
Membres de la classe
La liste suivante présente les membres de la classe CrmHttpResponseException.
| Classe CrmHttpResponseExceptionPropriétés :
StackTrace– la représentation de chaîne des premiers frames sur la pile des appels du serveur d’applications Dynamics 365 for Customer Engagement lorsque l’exception a été levée, le cas échéant.Méthodes : Le constructeur lancer une instance de cette classe et nécessite un paramètre HttpContent et un paramètre d’exception interne facultatif.
ExtractMessageFromContent– cette méthode statique extrait le message d’erreur du paramètre de contenu HTTP spécifié.
Utilisation
En règle générale, vous créez et levez un objet CrmHttpResponseException lors du traitement d’une erreur d’état renvoyée avec un message de réponse HTTP. Par exemple, le code suivant renvoie une telle erreur lorsque l’appel de WhoAmI Function échoue.
response = await httpClient.GetAsync("WhoAmI", HttpCompletionOption.ResponseContentRead);
if (!response.IsSuccessStatusCode)
{
throw new CrmHttpResponseException(response.Content);
}
Vous pouvez intercepter et traiter les objets CrmHttpResponseException renvoyés de la même manière que d’autres exceptions .NET standard.
Wichtig
Si vous utilisez la méthode HttpResponseMessage.EnsureSuccessStatusCode pour convertir automatiquement les erreurs de réponse HTTP en objets HttpRequestException renvoyés, cette approche exclut l’utilisation de la classe CrmHttpResponseException. Notez que si vous utilisez cette approche, la plupart des détails du message de réponse, notamment le code d’état, ne seront pas disponibles pendant le traitement des exceptions.
Liste des classes
La source la plus récente pour cette classe est disponible dans le package NuGet de la Bibliothèque d’aide de l’API web du Kit de développement logiciel CRM.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.Http;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace Microsoft.Crm.Sdk.Samples.HelperCode
{
/// <summary>
/// Produces a populated exception from an error message in the content of an HTTP response.
/// </summary>
public class CrmHttpResponseException : System.Exception
{
#region Properties
private static string _stackTrace;
/// <summary>
/// Gets a string representation of the immediate frames on the call stack.
/// </summary>
public override string StackTrace
{
get { return _stackTrace; }
}
#endregion Properties
#region Constructors
/// <summary>
/// Initializes a new instance of the CrmHttpResponseException class.
/// </summary>
/// <param name="content">The populated HTTP content in Json format.</param>
public CrmHttpResponseException(HttpContent content)
: base(ExtractMessageFromContent(content)) { }
/// <summary>
/// Initializes a new instance of the CrmHttpResponseException class.
/// </summary>
/// <param name="content">The populated HTTP content in Json format.</param>
/// <param name="innerexception">The exception that is the cause of the current exception, or a null reference
/// if no inner exception is specified.</param>
public CrmHttpResponseException(HttpContent content, Exception innerexception)
: base(ExtractMessageFromContent(content), innerexception) { }
#endregion Constructors
#region Methods
/// <summary>
/// Extracts the CRM specific error message and stack trace from an HTTP content.
/// </summary>
/// <param name="content">The HTTP content in Json format.</param>
/// <returns>The error message.</returns>
private static string ExtractMessageFromContent(HttpContent content)
{
string message = String.Empty;
string downloadedContent = content.ReadAsStringAsync().Result;
if (content.Headers.ContentType.MediaType.Equals("text/plain"))
{
message = downloadedContent;
}
else if (content.Headers.ContentType.MediaType.Equals("application/json"))
{
JObject jcontent = (JObject)JsonConvert.DeserializeObject(downloadedContent);
IDictionary<string, JToken> d = jcontent;
// An error message is returned in the content under the 'error' key.
if (d.ContainsKey("error"))
{
JObject error = (JObject)jcontent.Property("error").Value;
message = (String)error.Property("message").Value;
}
else if (d.ContainsKey("Message"))
message = (String)jcontent.Property("Message").Value;
if (d.ContainsKey("StackTrace"))
_stackTrace = (String)jcontent.Property("StackTrace").Value;
}
else if (content.Headers.ContentType.MediaType.Equals("text/html"))
{
message = "HTML content that was returned is shown below.";
message += "\n\n" + downloadedContent;
}
else
{
message = String.Format("No handler is available for content in the {0} format.",
content.Headers.ContentType.MediaType.ToString());
}
return message;
#endregion Methods
}
}
}
Voir aussi
Se familiariser avec l’API Web (C#)
Démarrer un projet de l’API web dans Visual Studio (C#)
Utiliser la bibliothèque d’aide de l’API Web Dynamics 365 Customer Engagement (C#)
Code d’aide : Classe Authentication
Code d’aide : classe de configuration
Hinweis
Pouvez-vous nous indiquer vos préférences de langue pour la documentation ? Répondez à un court questionnaire. (veuillez noter que ce questionnaire est en anglais)
Le questionnaire vous prendra environ sept minutes. Aucune donnée personnelle n’est collectée (déclaration de confidentialité).
Commentaires
Envoyer et afficher des commentaires pour