Compartir a través de


Solución de errores de cliente de Dataverse Web API

En este artículo se describen los errores de cliente comunes que puede encontrar al usar la API web de Dataverse y cómo puede evitarlos.

Recurso no encontrado para el segmento

Síntomas

Solicitar

GET [Organization URI]/api/data/v9.2/Account HTTP/1.1

Respuesta

HTTP/1.1 404 Not Found

{
 "error": {
  "code": "0x8006088a",
  "message": "Resource not found for the segment 'Account'."
 }
}

Causa

Este error se produce cuando se usa el nombre incorrecto para un recurso. Ese recurso puede ser el nombre de un conjunto de entidades, una función o una acción. Estos nombres de recursos distinguen mayúsculas de minúsculas. En el ejemplo anterior, hay un conjunto de entidades denominado accounts, pero no uno denominado Account.

Si el recurso es una acción definida como una acción de proceso personalizada, este error también puede producirse si la acción del proceso personalizado está inactiva.

Cómo evitar

  • Si el recurso es un tipo de entidad, consulte el documento servicio de API web que proporcionará una lista de todos los nombres conocidos del conjunto de entidades.
  • Si el recurso es una función o una acción, compruebe que el nombre que usa existe en el documento de $metadata CSDL.
  • Si la acción no existe en el documento de $metadata CSDL, puede ser una acción de proceso personalizado inactiva. Debe comprobar que está activo.

No se pudo encontrar una propiedad denominada '{property name}' en el tipo 'Microsoft.Dynamics.CRM'. {nombre de entidad}'

Síntomas

Solicitar

GET [Organization URI]/api/data/v9.2/accounts?$select=Name HTTP/1.1

Respuesta

HTTP/1.1 400 Bad Request

{
 "error": {
  "code": "0x0",
  "message": "Could not find a property named 'Name' on type 'Microsoft.Dynamics.CRM.account'."
 }
}

Causa

Este error se produce cuando se usa el nombre incorrecto para una propiedad. Los nombres de propiedad distinguen entre mayúsculas y minúsculas.

En el ejemplo anterior, hay una propiedad denominada name, pero no una denominada Name.

Cómo evitar

Compruebe que el nombre que usa existe en el documento de $metadata CSDL. Para obtener más información, consulte Propiedades de api web.

No se encontró ningún recurso HTTP que coincida con el URI de solicitud

Síntomas

Solicitar

POST [Organization URI]/api/data/v9.2/WhoAmI

Respuesta

HTTP/1.1 404 Not Found

{
 "error": {
  "code": "",
  "message": "No HTTP resource was found that matches the request URI '[Organization URI]/api/data/v9.2/WhoAmI'."
 }
}

Causa

Este error se produce cuando se aplica el método HTTP incorrecto a una función o acción. En este caso, la función WhoAmI requiere el uso de GET pero POST se usó.

Cómo evitar

Tenga en cuenta qué tipo de operación de OData está usando y el método HTTP correcto que se va a usar. Para más información, vea:

Se encontró una propiedad {nombre de propiedad} no válida en la entidad "Microsoft.Dynamics.CRM". {nombre de entidad}'

Síntomas

Solicitar

POST [Organization URI]/api/data/v9.2/accounts HTTP/1.1

{
 "Name": "Account name"
}

Respuesta

HTTP/1.1 400 Bad Request

{
 "error": {
  "code": "0x0",
  "message": "An error occurred while validating input parameters: 
    Microsoft.Crm.CrmException: Invalid property 'Name' was found in entity 'Microsoft.Dynamics.CRM.account'. 
    ---> Microsoft.OData.ODataException: Does not support untyped value in non-open type.<truncated for brevity>"
 }
}

Causa

Este error se produce porque se usó el nombre incorrecto de una propiedad. Los nombres de propiedad distinguen mayúsculas de minúsculas y Name se usaron en lugar de name.

Cómo evitar

Compruebe que el nombre de propiedad que usa existe en el documento de $metadata CSDL. Para obtener más información, consulte Propiedades de api web.

Error identificado en La carga proporcionada por el usuario para la entidad '{nombre de entidad}'

Hay dos problemas independientes que pueden producirse con este error. La diferencia está en InnerException.

InnerException : Microsoft.OData.ODataException: Se encontró una propiedad no declarada [...] en la carga útil.

Este error se produce cuando se envía un nombre de propiedad de navegación no válido con una solicitud.

Síntomas

Solicitar

POST [Organization URI]/api/data/v9.0/contacts HTTP/1.1

{
  "firstname":"test",
  "lastname":"contact",
  "parentcustomerid@odata.bind": "accounts(a779956b-d748-ed11-bb44-6045bd01152a)"
}

Respuesta

HTTP/1.1 400 Bad Request

{
    "error": {
        "code": "0x80048d19",
        "message": "Error identified in Payload provided by the user for Entity :'contacts'  ---->  
        InnerException : Microsoft.OData.ODataException: An undeclared property 'parentcustomerid' 
        which only has property annotations in the payload but no property value was found in the payload. 
        In OData, only declared navigation properties and declared named streams can be represented as 
        properties without values <truncated for brevity>".
    }
}

Causa

Este error se produce porque no hay ninguna propiedad de navegación con un solo valor en el tipo de entidad de contacto denominado parentcustomerid. Para obtener más información, consulte Contact EntityType Single-valued navigation properties(Propiedades de navegación con valores únicos de EntityType>).

parentcustomerid es el nombre lógico de una columna de búsqueda en la tabla de contactos. Todas las búsquedas se representan mediante propiedades de navegación con un solo valor en OData. Los nombres de las propiedades de búsqueda no siempre coinciden con el nombre de la propiedad de navegación con un solo valor correspondiente.

En este caso, la parentcustomerid columna es un tipo de búsqueda de cliente, un tipo de búsqueda de varias tablas que podría vincularse a las tablas de cuenta o de contacto. Para admitir esta búsqueda de clientes, hay dos relaciones independientes y cada una tiene una propiedad de navegación de un solo valor diferente. La propiedad de navegación con un solo valor correcto en este caso es parentcustomerid_account.

Cómo evitar

Compruebe que el nombre de la propiedad de navegación que usa existe en el documento de $metadata CSDL. Para obtener más información, consulte Propiedades de navegación de API web, especialmente en la sección Búsquedas de varias tablas .

InnerException : System.ArgumentException: Stream no se puede leer

Este error se produce al ejecutar operaciones por lotes.

Síntomas

Aparece el siguiente error al enviar una $batch solicitud.

Respuesta

HTTP/1.1 400 Bad Request

--batchresponse_5bd81edb-2ef9-4269-85c3-4623981e6c6e
Content-Type: application/http
Content-Transfer-Encoding: binary

HTTP/1.1 400 Bad Request
REQ_ID: 4c8c75eb-10bf-47f9-9998-c119146d511f
Content-Type: application/json; odata.metadata=minimal
OData-Version: 4.0

{"error":{"code":"0x80048d19","message":"Error identified in Payload provided by the user for Entity :'accounts',
For more information on this error please follow this help link https://go.microsoft.com/fwlink/?linkid=2195293
---->  InnerException : System.ArgumentException: Stream was not readable.\r\n
at System.IO.StreamReader..ctor(Stream stream, Encoding encoding, Boolean detectEncodingFromByteOrderMarks, Int32 bufferSize, Boolean leaveOpen)\r\n
at System.IO.StreamReader..ctor(Stream stream, Encoding encoding)\r\n
at Microsoft.OData.JsonLight.ODataJsonLightInputContext.CreateTextReader(Stream messageStream, Encoding encoding)\r\n
at Microsoft.OData.JsonLight.ODataJsonLightInputContext..ctor(ODataMessageInfo messageInfo, ODataMessageReaderSettings messageReaderSettings)\r\n
at Microsoft.OData.Json.ODataJsonFormat.CreateInputContext(ODataMessageInfo messageInfo, ODataMessageReaderSettings messageReaderSettings)\r\n
at Microsoft.OData.ODataMessageReader.ReadFromInput[T](Func`2 readFunc, ODataPayloadKind[] payloadKinds)\r\n
at System.Web.OData.Formatter.Deserialization.ODataResourceDeserializer.Read(ODataMessageReader messageReader, Type type, ODataDeserializerContext readContext)\r\n
at System.Web.OData.Formatter.ODataMediaTypeFormatter.ReadFromStream(Type type, Stream readStream, HttpContent content, IFormatterLogger formatterLogger)."}}
--batchresponse_5bd81edb-2ef9-4269-85c3-4623981e6c6e--

Causa

Este error de deserialización se debe al uso de finales de línea distintos de CRLF en el cuerpo de la solicitud por lotes.

En función del editor que use, estos caracteres que no son de impresión pueden ser difíciles de ver . Si usa el Bloc de notas++, puede usar la opción Mostrar todos los caracteres para que estos caracteres sean visibles.

Esta carga funcionará:

Captura de pantalla que muestra un cuerpo de solicitud por lotes con finales CRLF para todas las líneas.

Esta carga producirá un error porque la última línea no termina con CRLF.

Captura de pantalla que muestra un cuerpo de solicitud por lotes con CRLF que falta en la última línea.

En este caso, basta con agregar un retorno de carro al final de la última línea para que sea correcto.

Cómo evitar

Asegúrese de que todos los finales de línea del cuerpo de la $batch solicitud son CRLF. Si no puede usar , agregue dosCRLF finales que no sean CRLFde línea al final del cuerpo de la solicitud por lotes para resolver este error de deserialización. Para más información, consulte Solicitudes de Batch.

Consulte también