Code d'assistance de l'API Web : Classe CrmHttpResponseException
Date de publication : janvier 2017
S’applique à : Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online
Utilisez la classe CrmHttpResponseException pour représenter les erreurs d'état HTTP générées lors d'appels de l'API Web de Dynamics 365. Cette classe est dérivée de la classe System.Exception .NET standard à intégrer facilement à vos mécanismes de gestion des exceptions existants. Pour des informations 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 Microsoft Dynamics 365 (C#).
Cette classe utilise la fonctionnalité de gestion de chaîne JSON de la bibliothèque Json.NET à code source libre.
Membres de la classe
Le tableau suivant présente les membres de la classe CrmHttpResponseException.
Classe CrmHttpResponseException Propriétés : StackTrace – la représentation de chaîne des crades immédiats sur la pile des appels du serveur Dynamics 365 lorsque l'exception a été levée, le cas échéant.
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 fonction 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.
Important
Si vous utilisez la méthode HttpResponseMessage.EnsureSuccessStatusCode pour convertir automatiquement les erreurs de réponse HTTP dans les 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 Bibliothèque d'aide de l'API Web du Kit de développement logiciel (SDK) de 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 Microsoft Dynamics 365 (C#)
Démarrer un projet de l'API Web de Dynamics 365 dans Visual Studio (C#)
Utiliser la bibliothèque d'aide de l'API Web Microsoft Dynamics 365 (C#)
Code d'assistance de l'API Web : Classe Authentication
Code d'aide de l'API Web : classes de configuration
Microsoft Dynamics 365
© 2017 Microsoft. Tous droits réservés. Copyright