Condividi tramite


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

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

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

Screenshot che mostra il corpo di una richiesta batch con terminazioni CRLF per tutte le righe.

Questo payload ha esito negativo perché l'ultima riga non termina con CRLF.

Screenshot che mostra il corpo di una richiesta batch con CRLF mancante nell'ultima riga.

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 POSTmetodi HTTP , PATCHPUT, 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 POSTmetodi , PATCHo 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.

Vedi anche