Résoudre les erreurs du client de l’API web Dataverse
Cet article décrit les erreurs client courantes que vous pouvez rencontrer lors de l’utilisation de l’API web Dataverse et explique comment les éviter.
Ressource introuvable pour le segment
Symptômes
Demande
GET [Organization URI]/api/data/v9.2/Account HTTP/1.1
Réponse
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 jeu d’entités nommé Account
.
Si la ressource est une action définie en tant qu’action de processus personnalisé, 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 service d’API web qui fournit une liste de tous les noms de jeu 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 « {property name} » sur le type « Microsoft.Dynamics.CRM . {nom d’entité}'
Symptômes
Demande
GET [Organization URI]/api/data/v9.2/accounts?$select=Name HTTP/1.1
Réponse
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és 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 Propriétés de l’API web.
Aucune ressource HTTP correspondant à l’URI de la requête n’a été trouvée
Symptômes
Demande
POST [Organization URI]/api/data/v9.2/WhoAmI
Réponse
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
a été utilisée.
Comment éviter
Tenez compte du type d’opération OData que vous utilisez et de la méthode HTTP correcte à utiliser. Pour plus d’informations, reportez-vous aux rubriques suivantes :
- Actions de l’API web
- Utiliser des actions d’API web
- Fonctions d’API web
- Utiliser des fonctions d’API web
La propriété {property name} non valide a été trouvée dans l’entité ' Microsoft.Dynamics.CRM. {nom d’entité}'
Symptômes
Demande
POST [Organization URI]/api/data/v9.2/accounts HTTP/1.1
{
"Name": "Account name"
}
Réponse
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 car le nom incorrect d’une propriété a été utilisé. Les noms de propriété respectent la casse et Name
ont été utilisés à la place de name
.
Comment éviter
Vérifiez que le nom de la propriété que vous utilisez existe dans le document CSDL $metadata. Pour plus d’informations, consultez Propriétés de l’API web.
Erreur identifiée dans La charge utile fournie par l’utilisateur pour l’entité « {nom d’entité} »
Deux problèmes distincts peuvent se produire avec cette erreur. La différence réside dans l’InnerException.
- InnerException : Microsoft.OData.ODataException : une propriété non déclarée [...] a été trouvée dans la charge utile.
- InnerException : System.ArgumentException : Stream n’était pas lisible.
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 requête.
Symptômes
Demande
POST [Organization URI]/api/data/v9.0/contacts HTTP/1.1
{
"firstname":"test",
"lastname":"contact",
"parentcustomerid@odata.bind": "accounts(a779956b-d748-ed11-bb44-6045bd01152a)"
}
Réponse
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ée parentcustomerid
. Pour plus d’informations, consultez contacter EntityType > 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 sont représentées par des propriétés de navigation à valeur unique dans OData. Les noms des propriétés de recherche ne correspondent pas toujours au nom de la propriété de navigation à valeur unique correspondante.
Dans ce cas, la parentcustomerid
colonne est un type de recherche client, un type de recherche de plusieurs tables qui peut être liée au compte ou aux tables de contacts. Pour prendre en charge cette recherche client, il existe deux relations distinctes et chacune a 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 la 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 de plusieurs tables.
InnerException : System.ArgumentException : Stream n’était pas lisible
Cette erreur se produit lors de l’exécution d’opérations par lot.
Symptômes
Vous obtenez l’erreur suivante lors de l’envoi d’une $batch
requête.
Réponse
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
Cette erreur de désérialisation est due à l’utilisation de fin de ligne autres que CRLF dans le corps de la demande de lot.
Selon l’éditeur que vous utilisez, ces caractères qui ne sont pas imprimables peuvent être difficiles à voir. Si vous utilisez Notepad++, vous pouvez utiliser l’option Afficher tous les caractères pour rendre ces caractères visibles.
Cette charge utile fonctionne :
Cette charge utile échoue, car la dernière ligne ne se termine pas par CRLF
.
Dans ce cas, il suffit d’ajouter un retour chariot à la fin de la dernière ligne pour qu’elle réussisse.
Comment éviter
Vérifiez que toutes les fins de ligne dans le corps de la $batch
requête sont CRLF
. Si vous ne pouvez pas utiliser CRLF
, ajoutez deux terminaisons autres queCRLF
les lignes à la fin du corps de la demande de lot pour résoudre cette erreur de désérialisation. Pour plus d’informations, consultez Requêtes Batch.