Freigeben über


Behandeln von Dataverse-Web-API-Clientfehlern

In diesem Artikel werden häufige Clientfehler beschrieben, die bei verwendung der Dataverse-Web-API auftreten können und wie Sie sie vermeiden können.

Ressource für das Segment nicht gefunden

Symptome

Anfordern

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 eines Entitätssatzes, einer Funktion oder einer Aktion sein. Bei diesen Ressourcennamen wird die Groß-/Kleinschreibung beachtet. Im vorherigen Beispiel wird ein Entitätssatz aufgerufen accounts, jedoch kein Benannter Account.

Wenn es sich bei der Ressource um eine Aktion handelt, die als benutzerdefinierte Prozessaktion definiert ist, kann dieser Fehler auch auftreten, wenn die benutzerdefinierte Prozessaktion inaktiv ist.

So vermeiden Sie

  • 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 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}' wurde für den Typ 'Microsoft.Dynamics.CRM' nicht gefunden. {Entitätsname}'

Symptome

Anfordern

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 zwischen Groß- und Kleinschreibung unterschieden.

Im vorherigen Beispiel wird eine Eigenschaft aufgerufen name, aber keine benannte Name.

So vermeiden Sie

Stellen Sie sicher, dass der 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

Anfordern

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, GET wurde aber POST verwendet.

So vermeiden Sie

Beachten Sie, welche Art von OData-Vorgang Sie verwenden, und die richtige HTTP-Methode, die Verwendet werden soll. Weitere Informationen finden Sie unter:

Ungültige Eigenschaft '{property name}' wurde in der Entität 'Microsoft.Dynamics.CRM' gefunden. {Entitätsname}'

Symptome

Anfordern

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 nicht nameverwendet.

So vermeiden Sie

Stellen Sie sicher, dass der verwendete Eigenschaftsname im CSDL-$metadata Dokument vorhanden ist. Weitere Informationen finden Sie unter Web-API-Eigenschaften.

Fehler, der in der vom Benutzer für die Entität '{entity name}' bereitgestellten Nutzlast angegeben wurde

Es gibt zwei separate Probleme, die bei diesem Fehler auftreten können. Der Unterschied liegt in der InnerException.

InnerException : Microsoft.OData.ODataException: Eine nicht deklarierte Eigenschaft [...] wurde in der Nutzlast gefunden.

Dieser Fehler tritt auf, wenn ein ungültiger Navigationseigenschaftsname mit einer Anforderung gesendet wird.

Symptome

Anfordern

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, da keine einzelwertige Navigationseigenschaft im Kontaktentitätstyp mit dem Namen vorhanden parentcustomeridist. Weitere Informationen finden Sie unter "EntityType > Single-Valued"-Navigationseigenschaften.

parentcustomerid ist der logische Name einer Nachschlagespalte in der Kontakttabelle. Alle Nachschlagevorgänge werden durch einzelwertige Navigationseigenschaften in OData dargestellt. Die Namen der Nachschlageeigenschaften stimmen nicht immer mit dem entsprechenden einzelwertigen Navigationseigenschaftennamen überein.

In diesem Fall handelt es sich bei der parentcustomerid Spalte um einen Kundensuchtyp, eine Art von Nachschlagevorgang mit mehreren Tabellen, die entweder mit dem Konto oder den Kontakttabellen verknüpft werden können. Um diese Kundensuche zu unterstützen, gibt es zwei separate Beziehungen und jede hat eine andere einzelwertige Navigationseigenschaft. Die richtige einzelwertige Navigationseigenschaft in diesem Fall lautet parentcustomerid_account.

So vermeiden Sie

Stellen Sie sicher, dass der verwendete Navigationseigenschaftsname 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 auf, wenn Batchvorgänge ausgeführt werden.

Symptome

Beim Senden einer $batch Anforderung wird die folgende Fehlermeldung 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 Zeilenabschluss als CRLF im Batchanforderungstext verursacht.

Je nach dem von Ihnen 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:

Screenshot eines Batchanforderungstexts mit CRLF-Endungen für alle Zeilen.

Diese Nutzlast schlägt fehl, da die letzte Zeile nicht mit CRLF.

Screenshot eines Batchanforderungstexts mit fehlendem CRLF in der letzten Zeile.

In diesem Fall reicht nur das Hinzufügen eines Wagenrücklaufs am Ende der letzten Zeile aus, um es erfolgreich zu machen.

So vermeiden Sie

Stellen Sie sicher, dass alle Zeilenabschluss im $batch Anforderungstext enthalten sindCRLF. Wenn Sie dies nicht verwenden CRLFkönnen, fügen Sie am Ende des Batchanforderungstexts zwei nicht ZeilenabschlussCRLF hinzu, um diesen Deserialisierungsfehler zu beheben. Weitere Informationen finden Sie unter Batchanforderungen.

Siehe auch