Risolvere gli errori del client dell'API Web dataverse
Questo articolo descrive gli errori client comuni che possono verificarsi quando si usa l'API Web Dataverse e come evitarli.
Risorsa non trovata per il segmento
Sintomi
Richiedi
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'."
}
}
Causa
Questo errore si verifica quando si usa il nome non corretto per una risorsa. Tale risorsa potrebbe essere il nome di un set di entità, di una funzione o di un'azione. Questi nomi di risorse fanno distinzione tra maiuscole e minuscole. Nell'esempio precedente è presente un set di entità denominato accounts
, ma non un set denominato Account
.
Se la risorsa è un'azione definita come azione di processo personalizzata, questo errore può verificarsi anche se l'azione del processo personalizzato è inattiva.
Come evitare
- Se la risorsa è un tipo di entità, eseguire una query sul documento servizio API Web che fornisce un elenco di tutti i nomi dei set di entità noti.
- Se la risorsa è una funzione o un'azione, verificare che il nome usato esista nel documento CSDL $metadata.
- Se l'azione non esiste nel documento CSDL $metadata, potrebbe trattarsi di un'azione di processo personalizzato inattiva. Verificare che sia attivo.
Impossibile trovare una proprietà denominata '{nome proprietà}' nel tipo 'Microsoft.Dynamics.CRM'. {nome entità}'
Sintomi
Richiedi
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'."
}
}
Causa
Questo errore si verifica quando si utilizza il nome non corretto per una proprietà. I nomi delle proprietà distinguono tra maiuscole e minuscole.
Nell'esempio precedente è presente una proprietà denominata , ma non una denominata name
Name
.
Come evitare
Verificare che il nome usato esista nel documento csdl $metadata. Per altre informazioni, vedere Proprietà dell'API Web.
Non è stata trovata alcuna risorsa HTTP corrispondente all'URI della richiesta
Sintomi
Richiedi
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'."
}
}
Causa
Questo errore si verifica quando il metodo HTTP non corretto viene applicato a una funzione o a un'azione. In questo caso, la funzione WhoAmI richiede l'uso di GET
ma POST
viene usata.
Come evitare
Tenere presente il tipo di operazione OData in uso e il metodo HTTP corretto da usare. Per altre informazioni, vedi:
Proprietà {nome proprietà} non valida trovata nell'entità 'Microsoft.Dynamics.CRM.. {nome entità}'
Sintomi
Richiedi
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>"
}
}
Causa
Questo errore si verifica perché è stato utilizzato il nome non corretto per una proprietà. I nomi delle proprietà fanno distinzione tra maiuscole e minuscole e Name
sono stati usati anziché name
.
Come evitare
Verificare che il nome della proprietà usato esista nel documento CSDL $metadata. Per altre informazioni, vedere Proprietà dell'API Web.
Errore identificato nel payload fornito dall'utente per l'entità '{nome entità}'
Esistono due problemi distinti che possono verificarsi con questo errore. La differenza è nell'eccezione InnerException.
- InnerException: Microsoft.OData.ODataException: è stata trovata una proprietà non dichiarata [...] nel payload.
- InnerException: System.ArgumentException: Stream non è leggibile.
InnerException: Microsoft.OData.ODataException: una proprietà non dichiarata [...] è stata trovata nel payload
Questo errore si verifica quando viene inviato un nome di proprietà di navigazione non valido con una richiesta.
Sintomi
Richiedi
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>".
}
}
Causa
Questo errore si verifica perché non esiste alcuna proprietà di navigazione a valore singolo nel tipo di entità contatto denominato parentcustomerid
. Per altre informazioni, vedere Proprietà di navigazione a valore singolo.
parentcustomerid
è il nome logico di una colonna di ricerca nella tabella dei contatti. Tutte le ricerche hanno una o più proprietà di navigazione a valore singolo in OData. I nomi delle proprietà di ricerca non corrispondono sempre al nome della proprietà di navigazione a valore singolo corrispondente.
In questo caso, la parentcustomerid
colonna è un tipo di ricerca cliente, un tipo di ricerca a più tabelle che potrebbe essere collegato all'account o alle tabelle dei contatti. Per supportare la ricerca di questo cliente, esistono due relazioni separate e ognuna ha una proprietà di navigazione a valore singolo diversa. In questo caso la proprietà di navigazione a valore singolo corretta è parentcustomerid_account
.
Come evitare
Verificare che il nome della proprietà di navigazione usato esista nel documento CSDL $metadata. Per altre informazioni, vedere Proprietà di navigazione dell'API Web, in particolare la sezione Ricerche su più tabelle .
InnerException: System.ArgumentException: Stream non era leggibile
Questo errore si verifica durante l'esecuzione di operazioni batch.
Sintomi
Quando si invia una $batch
richiesta, viene visualizzato l'errore seguente.
Risposta
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
L'uso di terminazioni di riga diverse da CRLF nel corpo della richiesta batch causa questo errore di deserializzazione.
A seconda dell'editor usato, questi caratteri non stampabili possono essere difficili da vedere. Se si usa Blocco note++, è possibile usare l'opzione Mostra tutti i caratteri per rendere visibili questi caratteri.
Questo payload funziona:
Questo payload ha esito negativo perché l'ultima riga non termina con CRLF
.
In questo caso, l'aggiunta di un ritorno a capo alla fine dell'ultima riga è sufficiente per far sì che abbia esito positivo.
Come evitare
Verificare che tutte le terminazioni di riga nel corpo della $batch
richiesta siano CRLF
. Se non è possibile usare CRLF
, aggiungere dueCRLF
terminazioni non di riga alla fine del corpo della richiesta batch per risolvere questo errore di deserializzazione. Per altre informazioni, vedere Richieste batch.
Errore identificato nel valore 'odata.include-annotations' all'interno dell'intestazione 'Prefer'
Sintomi
L'errore si verifica quando l'API Web Dataverse riceve una richiesta con un valore non valido odata.include-annotations
nel valore dell'intestazione della Prefer
richiesta. Questo problema si verifica quando la richiesta viene inviata usando i POST
metodi HTTP , PATCH
PUT
, o GET
con un'intestazione Prefer
di richiesta che contiene un valore non valido o formattato in modo non corretto.
Nell'esempio seguente il odata.include-annotations
valore include erroneamente barre rovesciata (\) per eseguire l'escape dei caratteri di virgolette.
Richiedi
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"
}
Causa
Per fornire un servizio più sicuro, viene risolto un problema a causa del quale i valori di intestazione della richiesta non validi Prefer
vengono elaborati senza convalida quando si usano i POST
metodi , PATCH
o PUT
HTTP. La convalida viene ora applicata per tutti i metodi HTTP. Questo errore si verifica a partire da Dataverse versione 9.2.2412.3 che inizia la distribuzione a gennaio 2025 e verrà distribuito in tutte le aree entro febbraio 2025.
Come evitare
Esaminare le indicazioni su come impostare correttamente le intestazioni Prefer nell'API Web Dataverse.