Código auxiliar de API web: Clase CrmHttpResponseException
Publicado: enero de 2017
Se aplica a: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online
Use la clase CrmHttpResponseException para representar Errores de estado HTTP generados durante las llamadas de la API web de Dynamics 365. Esta clase se deriva de la clase sistema .NET System.Exception estándar para integrarse fácilmente con sus mecanismos existentes de control de excepciones. Para obtener información más general, consulte Control y lanzamiento de excepciones.
La clase CrmHttpResponseException se encuentra en el archivo Exceptions.cs en la Biblioteca de código auxiliar de la API web de CRM Se usa extensivamente en las otras clases de biblioteca de código auxiliar y ejemplos web de la API web en C#. Para obtener más información, vea Use la biblioteca de código auxiliar de la API web de Microsoft Dynamics 365 (C#).
Esta clase usa funcionalidad de control de cadenas JSON desde la biblioteca Json.NET de origen abierto.
Integrantes de la clase
La siguiente tabla muestra los integrantes públicos de la clase CrmHttpResponseException.
Clase CrmHttpResponseException Propiedades: StackTrace – la representación de cadena de los marcos inmediatos en la pila de llamadas del servidor de Dynamics 365 cuando se lanzó la excepción, si está disponible.
Los constructores inicializan una instancia de esta clase y requieren un parámetro HttpContent y un parámetro de excepción interno opcional. ExtractMessageFromContent – este método estático extrae el mensaje de error del parámetro de contenido HTTP especificado. |
Uso
Normalmente, usted crea y genera un objeto CrmHttpResponseException al procesar un error de estado devuelto con un mensaje de respuesta HTTP. Por ejemplo, el siguiente código inicia un error de este tipo cuando la llamada a la función WhoAmI Function produce un error.
response = await httpClient.GetAsync("WhoAmI", HttpCompletionOption.ResponseContentRead);
if (!response.IsSuccessStatusCode)
{
throw new CrmHttpResponseException(response.Content);
}
Puede recoger y procesar objetos CrmHttpResponseException lanzados de forma similar a otras excepciones .NET estándar.
Importante
Si está usando el método HttpResponseMessage.EnsureSuccessStatusCode para convertir automáticamente errores de respuesta HTTP en objetos HttpRequestException lanzados, este método impide el uso de la clase CrmHttpResponseException. Tenga en cuenta que si usa este método, gran parte de los detalles de respuesta, incluido el código de estado, no estarán disponibles durante control de excepciones.
Lista de clases
El origen más actual para esta clase se encuentra en el paquete de NuGet de la Biblioteca de código auxiliar de la API web del 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
}
}
}
Ver también
Introducción a la API web de Microsoft Dynamics 365 (C#)
Iniciar un proyecto de la web API de Dynamics 365 en Visual Studio (C#)
Use la biblioteca de código auxiliar de la API web de Microsoft Dynamics 365 (C#)
Código auxiliar de API web: Clase de autenticación
Código auxiliar de la API web: Clases de configuración
Microsoft Dynamics 365
© 2017 Microsoft. Todos los derechos reservados. Copyright