Partager via


Résoudre les erreurs du client de l’API Web Dataverse

Cet article décrit les erreurs courantes du client que vous pouvez rencontrer lors de l’utilisation de l’API Web Dataverse et comment vous pouvez les éviter.

Ressource introuvable pour le segment

Symptômes

Requête

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

Response

HTTP/1.1 404 Not Found

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

Cause

Cette erreur se produit lorsque vous utilisez le nom incorrect d’une ressource. Cette ressource peut être le nom d’un jeu d’entités, d’une fonction ou d’une action. Ces noms de ressources respectent la casse. Dans l’exemple précédent, il existe un jeu d’entités appelé accounts, mais pas un nommé Account.

Si la ressource est une action définie comme une action de processus personnalisée, cette erreur peut également se produire si l’action de processus personnalisé est inactive.

Comment éviter

  • Si la ressource est un type d’entité, interrogez le document du service d’API web qui fournit la liste de tous les noms d’ensembles d’entités connus.
  • Si la ressource est une fonction ou une action, vérifiez que le nom que vous utilisez existe dans le document CSDL $metadata.
  • Si l’action n’existe pas dans le document CSDL $metadata, il peut s’agir d’une action de processus personnalisé inactive. Vous devez vérifier qu’il est actif.

Impossible de trouver une propriété nommée « {nom de propriété} » sur le type « Microsoft.Dynamics.CRM ». {nom d’entité}'

Symptômes

Requête

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

Response

HTTP/1.1 400 Bad Request

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

Cause

Cette erreur se produit lorsque vous utilisez le nom incorrect d’une propriété. Les noms de propriété respectent la casse.

Dans l’exemple précédent, il existe une propriété appelée name, mais pas une propriété nommée Name.

Comment éviter

Vérifiez que le nom que vous utilisez existe dans le document CSDL $metadata. Pour plus d’informations, consultez les propriétés de l’API web.

Aucune ressource HTTP n’a été trouvée qui correspond à l’URI de requête

Symptômes

Requête

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

Response

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'."
 }
}

Cause

Cette erreur se produit lorsque la méthode HTTP incorrecte est appliquée à une fonction ou à une action. Dans ce cas, la fonction WhoAmI nécessite l’utilisation de GET mais POST est utilisée.

Comment éviter

Tenez compte du type d’opération OData que vous utilisez et de la méthode HTTP appropriée à utiliser. Pour plus d’informations, consultez l’article suivant :

La propriété {nom de propriété} non valide a été trouvée dans l’entité « Microsoft.Dynamics.CRM ». {nom d’entité}'

Symptômes

Requête

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

{
 "Name": "Account name"
}

Response

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>"
 }
}

Cause

Cette erreur se produit parce que le nom incorrect d’une propriété a été utilisé. Les noms de propriété respectent la casse et Name ont été utilisés plutôt que name.

Comment éviter

Vérifiez que le nom de propriété que vous utilisez existe dans le document CSDL $metadata. Pour plus d’informations, consultez les propriétés de l’API web.

Erreur identifiée dans La charge utile fournie par l’utilisateur pour l’entité « {nom d’entité} »

Il existe deux problèmes distincts qui peuvent se produire avec cette erreur. La différence est dans InnerException.

InnerException : Microsoft.OData.ODataException : Une propriété non déclarée [...] a été trouvée dans la charge utile

Cette erreur se produit lorsqu’un nom de propriété de navigation non valide est envoyé avec une demande.

Symptômes

Requête

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

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

Response

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>".
    }
}

Cause

Cette erreur se produit car il n’existe aucune propriété de navigation à valeur unique dans le type d’entité contact nommé parentcustomerid. Pour plus d’informations, consultez les propriétés de navigation à valeur unique.

parentcustomerid est le nom logique d’une colonne de recherche dans la table de contacts. Toutes les recherches ont une ou plusieurs propriétés de navigation à valeur unique dans OData. Les noms des propriétés de recherche ne correspondent pas toujours au nom de propriété de navigation à valeur unique correspondante.

Dans ce cas, la parentcustomerid colonne est un type de recherche client, un type de recherche multi-tables qui peut être lié au compte ou aux tables de contact. Pour prendre en charge cette recherche client, il existe deux relations distinctes et chacune possède une propriété de navigation à valeur unique différente. La propriété de navigation à valeur unique correcte dans ce cas est parentcustomerid_account.

Comment éviter

Vérifiez que le nom de propriété de navigation que vous utilisez existe dans le document CSDL $metadata. Pour plus d’informations, consultez Propriétés de navigation de l’API web, en particulier la section Recherches sur plusieurs tables.

InnerException : System.ArgumentException : Stream n’a pas été lisible

Cette erreur se produit lors de l’exécution d’opérations par lots.

Symptômes

Vous obtenez l’erreur suivante lors de l’envoi d’une $batch demande.

response

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--

Cause

L’utilisation de fin de ligne autres que CRLF dans le corps de la demande de traitement par lots provoque cette erreur de désérialisation.

Selon l’éditeur que vous utilisez, ces caractères non imprimables peuvent être difficiles à voir. Si vous utilisez le Bloc-notes++, vous pouvez utiliser l’option Afficher tous les caractères pour rendre ces caractères visibles.

Cette charge utile fonctionne :

Capture d’écran montrant un corps de requête de lot avec des terminaisons CRLF pour toutes les lignes.

Cette charge utile échoue, car la dernière ligne ne se termine pas par CRLF.

Capture d’écran montrant un corps de requête de lot avec CRLF manquant sur la dernière ligne.

Dans ce cas, il suffit d’ajouter un retour chariot à la fin de la dernière ligne pour réussir.

Comment éviter

Vérifiez que toutes les fin de ligne dans le corps de la $batch requête sont CRLF. Si vous ne pouvez pas utiliserCRLF, ajoutez deux fin de ligne non-fin de ligneCRLF à la fin du corps de la demande de lot pour résoudre cette erreur de désérialisation. Pour plus d’informations, consultez demandes Batch.

Erreur identifiée sur la valeur « odata.include-annotations » dans l’en-tête « Prefer »

Symptômes

L’erreur se produit lorsque l’API Web Dataverse reçoit une demande avec une valeur non valide odata.include-annotations dans la valeur d’en-tête de la Prefer requête. Ce problème se produit lorsque la requête est envoyée à l’aide des POSTméthodes , , PATCHou PUTGET HTTP avec un Prefer en-tête de requête qui contient une valeur non valide ou mal mise en forme.

Dans l’exemple suivant, la odata.include-annotations valeur inclut incorrectement des barres obliques inverses (\) pour échapper aux guillemets.

Requête

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

Prefer: odata.include-annotations=\"*\"

{
  "firstname":"test",
  "lastname":"contact"
}

Response

HTTP/1.1 400 Bad Request

{
  "Message": "Error identified on the 'odata.include-annotations' value inside the 'Prefer' header. 
  Refer to the following link for more details: https://go.microsoft.com/fwlink/?linkid=2300109. 
  See exception message for more details 'An error occurred when parsing the HTTP header 'Prefer'. The header value 'odata.include-annotations=\\\"*\\\"' is incorrect at position '26' because the escape character '\\' is not inside a quoted-string.'.",
  "ErrorCode": "0x80097303"
}

Cause

Pour fournir un service plus sécurisé, nous corrigeons un problème où les valeurs d’en-tête de requête non valides Prefer sont traitées sans validation lors de l’utilisation des POSTméthodes HTTP ou PUT , PATCH À présent, la validation est appliquée pour toutes les méthodes HTTP. Cette erreur se produit à compter de Dataverse version 9.2.2412.3 qui commence le déploiement en janvier 2025 et qui sera déployée dans toutes les régions d’ici février 2025.

Comment éviter

Passez en revue les instructions sur la façon de définir correctement les en-têtes Prefer dans l’API Web Dataverse.

Voir aussi