Behandeln von Fehlern beim Dataverse-Web-API-Client
In diesem Artikel werden häufige Clientfehler beschrieben, die bei der Verwendung der Dataverse-Web-API auftreten können, und wie Sie diese vermeiden können.
Ressource für das Segment nicht gefunden
Symptome
Anforderung
GET [Organization URI]/api/data/v9.2/Account HTTP/1.1
Antwort
HTTP/1.1 404 Not Found
{
"error": {
"code": "0x8006088a",
"message": "Resource not found for the segment 'Account'."
}
}
Ursache
Dieser Fehler tritt auf, wenn Sie den falschen Namen für eine Ressource verwenden. Diese Ressource kann der Name einer Entitätsmenge, einer Funktion oder einer Aktion sein. Bei diesen Ressourcennamen wird die Groß-/Kleinschreibung beachtet. Im vorherigen Beispiel gibt es einen Entitätssatz namens accounts
, aber keine mit dem Namen Account
.
Wenn die Ressource eine Aktion ist, die als benutzerdefinierte Prozessaktion definiert ist, kann dieser Fehler auch auftreten, wenn die benutzerdefinierte Prozessaktion inaktiv ist.
Vermeiden von
- Wenn es sich bei der Ressource um einen Entitätstyp handelt, fragen Sie das Web-API-Dienstdokument ab, das eine Liste aller bekannten Entitätssatznamen bereitstellt.
- Wenn es sich bei der Ressource um eine Funktion oder Aktion handelt, überprüfen Sie, ob der von Ihnen verwendete Name im CSDL-$metadata Dokument vorhanden ist.
- Wenn die Aktion im CSDL-$metadata Dokument nicht vorhanden ist, kann es sich um eine inaktive benutzerdefinierte Prozessaktion handeln. Sie sollten überprüfen, ob sie aktiv ist.
Eine Eigenschaft mit dem Namen "{property name}" für den Typ "Microsoft.Dynamics.CRM" konnte nicht gefunden werden. {Entitätsname}'
Symptome
Anforderung
GET [Organization URI]/api/data/v9.2/accounts?$select=Name HTTP/1.1
Antwort
HTTP/1.1 400 Bad Request
{
"error": {
"code": "0x0",
"message": "Could not find a property named 'Name' on type 'Microsoft.Dynamics.CRM.account'."
}
}
Ursache
Dieser Fehler tritt auf, wenn Sie den falschen Namen für eine Eigenschaft verwenden. Bei Eigenschaftennamen wird die Groß-/Kleinschreibung beachtet.
Im vorherigen Beispiel gibt es eine Eigenschaft namens name
, aber keine mit dem Namen Name
.
Vermeiden von
Vergewissern Sie sich, dass der von Ihnen verwendete Name im CSDL-$metadata Dokument vorhanden ist. Weitere Informationen finden Sie unter Web-API-Eigenschaften.
Es wurde keine HTTP-Ressource gefunden, die dem Anforderungs-URI entspricht.
Symptome
Anforderung
POST [Organization URI]/api/data/v9.2/WhoAmI
Antwort
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'."
}
}
Ursache
Dieser Fehler tritt auf, wenn die falsche HTTP-Methode auf eine Funktion oder Aktion angewendet wird. In diesem Fall erfordert die WhoAmI-Funktion die Verwendung von GET
, wurde aber POST
verwendet.
Vermeiden von
Beachten Sie, welche Art von OData-Vorgang Sie verwenden, und die richtige HTTP-Methode. Weitere Informationen finden Sie unter:
In der Entität "Microsoft.Dynamics.CRM" wurde eine ungültige Eigenschaft {Eigenschaftsname} gefunden. {Entitätsname}'
Symptome
Anforderung
POST [Organization URI]/api/data/v9.2/accounts HTTP/1.1
{
"Name": "Account name"
}
Antwort
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>"
}
}
Ursache
Dieser Fehler tritt auf, weil der falsche Name für eine Eigenschaft verwendet wurde. Bei Eigenschaftsnamen wird die Groß-/Kleinschreibung beachtet und Name
anstelle name
von verwendet.
Vermeiden von
Vergewissern Sie sich, dass der von Ihnen verwendete Eigenschaftenname im CSDL-$metadata Dokument vorhanden ist. Weitere Informationen finden Sie unter Web-API-Eigenschaften.
Fehler in der vom Benutzer bereitgestellten Nutzlast für die Entität '{Entitätsname}'
Es gibt zwei separate Probleme, die mit diesem Fehler auftreten können. Der Unterschied besteht in der InnerException.
- InnerException: Microsoft.OData.ODataException: Eine nicht deklarierte Eigenschaft [...] wurde in der Nutzlast gefunden.
- InnerException: System.ArgumentException: Stream war nicht lesbar.
InnerException: Microsoft.OData.ODataException: Eine nicht deklarierte Eigenschaft [...] wurde in der Nutzlast gefunden
Dieser Fehler tritt auf, wenn ein ungültiger Navigationseigenschaftenname mit einer Anforderung gesendet wird.
Symptome
Anforderung
POST [Organization URI]/api/data/v9.0/contacts HTTP/1.1
{
"firstname":"test",
"lastname":"contact",
"parentcustomerid@odata.bind": "accounts(a779956b-d748-ed11-bb44-6045bd01152a)"
}
Antwort
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>".
}
}
Ursache
Dieser Fehler tritt auf, weil es keine einwertige Navigationseigenschaft im Kontaktentitätstyp namens parentcustomerid
gibt. Weitere Informationen finden Sie unter Contact EntityType > Single-valued navigation properties( Single-valued navigation properties).
parentcustomerid
ist der logische Name einer Nachschlagespalte in der Kontakttabelle. Alle Lookups werden durch einwertige Navigationseigenschaften in OData dargestellt. Die Namen der Nachschlageeigenschaften stimmen nicht immer mit dem entsprechenden Namen der einwertigen Navigationseigenschaft überein.
In diesem Fall handelt es sich bei der parentcustomerid
Spalte um einen Kundensuchtyp, eine Art Nachschlagevorgang mit mehreren Tabellen , die entweder mit der Konto- oder Kontakttabelle verknüpft werden kann. Zur Unterstützung dieser Kundensuche gibt es zwei separate Beziehungen, die jeweils über eine andere einwertige Navigationseigenschaft verfügen. Die richtige einwertige Navigationseigenschaft ist parentcustomerid_account
in diesem Fall .
Vermeiden von
Vergewissern Sie sich, dass der name der Navigationseigenschaft, den Sie verwenden, im CSDL-$metadata Dokument vorhanden ist. Weitere Informationen finden Sie unter Web-API-Navigationseigenschaften, insbesondere im Abschnitt Nachschlagevorgänge mit mehreren Tabellen .
InnerException : System.ArgumentException: Stream war nicht lesbar
Dieser Fehler tritt beim Ausführen von Batchvorgängen auf.
Symptome
Beim Senden einer $batch
Anforderung wird der folgende Fehler angezeigt.
Antwort
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--
Ursache
Dieser Deserialisierungsfehler wird durch die Verwendung anderer Zeilenenden als CRLF im Batchanforderungstext verursacht.
Abhängig vom verwendeten Editor können diese nicht druckbaren Zeichen schwer zu erkennen sein. Wenn Sie Editor++ verwenden, können Sie die Option Alle Zeichen anzeigen verwenden, um diese Zeichen sichtbar zu machen.
Diese Nutzlast funktioniert:
Diese Nutzlast schlägt fehl, da die letzte Zeile nicht mit CRLF
endet.
In diesem Fall reicht das Hinzufügen eines Wagenrücklaufs am Ende der letzten Zeile aus, um den Vorgang erfolgreich zu machen.
Vermeiden von
Stellen Sie sicher, dass alle Zeilenenden im $batch
Anforderungstext sind CRLF
. Wenn Sie nicht verwenden CRLF
können, fügen Sie zwei Nicht-ZeilenendenCRLF
am Ende des Batchanforderungstexts hinzu, um diesen Deserialisierungsfehler zu beheben. Weitere Informationen finden Sie unter Batchanforderungen.