Delen via


Problemen met de Dataverse Web API-client oplossen

In dit artikel worden veelvoorkomende clientfouten beschreven die kunnen optreden bij het gebruik van de Dataverse-web-API en hoe u deze kunt voorkomen.

Resource is niet gevonden voor het segment

Symptomen

Aanvragen

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'."
 }
}

Oorzaak

Deze fout treedt op wanneer u de onjuiste naam voor een resource gebruikt. Deze resource kan de naam zijn van een entiteitsset, een functie of een actie. Deze resourcenamen zijn hoofdlettergevoelig. In het voorgaande voorbeeld is er een entiteitsset met de naam accounts, maar niet één met de naam Account.

Als de resource een actie is die is gedefinieerd als een aangepaste procesactie, kan deze fout ook optreden als de aangepaste procesactie inactief is.

Hoe u vermijdt

  • Als de resource een entiteitstype is, voert u een query uit op het web-API-servicedocument dat een lijst bevat met alle namen van de bekende entiteitssets.
  • Als de resource een functie of actie is, controleert u of de naam die u gebruikt, bestaat in het csdl-$metadata-document.
  • Als de actie niet bestaat in het csdl-$metadata-document, kan dit een inactieve aangepaste procesactie zijn. Controleer of deze actief is.

Kan geen eigenschap met de naam {property name} vinden voor het type Microsoft.Dynamics.CRM. {entiteitsnaam}'

Symptomen

Aanvragen

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'."
 }
}

Oorzaak

Deze fout treedt op wanneer u de onjuiste naam voor een eigenschap gebruikt. Eigenschapsnamen zijn hoofdlettergevoelig.

In het voorgaande voorbeeld is er een eigenschap met de naam name, maar niet met de naam Name.

Hoe u vermijdt

Controleer of de naam die u gebruikt, bestaat in het document CSDL $metadata. Zie Web-API-eigenschappen voor meer informatie.

Er is geen HTTP-resource gevonden die overeenkomt met de aanvraag-URI

Symptomen

Aanvragen

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'."
 }
}

Oorzaak

Deze fout treedt op wanneer de onjuiste HTTP-methode wordt toegepast op een functie of actie. In dit geval vereist de functie WhoAmI het gebruik van GET maar POST wordt gebruikt.

Hoe u vermijdt

Houd rekening met het type OData-bewerking dat u gebruikt en de juiste HTTP-methode die u moet gebruiken. Zie voor meer informatie:

Ongeldige eigenschap {eigenschapsnaam} is gevonden in entiteit Microsoft.Dynamics.CRM. {entiteitsnaam}'

Symptomen

Aanvragen

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>"
 }
}

Oorzaak

Deze fout treedt op omdat de onjuiste naam voor een eigenschap is gebruikt. Eigenschapsnamen zijn hoofdlettergevoelig en Name zijn gebruikt in plaats namevan .

Hoe u vermijdt

Controleer of de naam van de eigenschap die u gebruikt aanwezig is in het csdl-$metadata-document. Zie Web-API-eigenschappen voor meer informatie.

Er is een fout opgetreden in payload die is opgegeven door de gebruiker voor de entiteit {entity name}.

Er zijn twee afzonderlijke problemen die kunnen optreden met deze fout. Het verschil is in innerException.

InnerException : Microsoft.OData.ODataException: Er is een niet-declaratieve eigenschap [...] gevonden in de nettolading

Deze fout treedt op wanneer een ongeldige naam van de navigatie-eigenschap wordt verzonden met een aanvraag.

Symptomen

Aanvragen

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>".
    }
}

Oorzaak

Deze fout treedt op omdat er geen navigatie-eigenschap met één waarde is in het type contactpersoonentiteit met de naam parentcustomerid. Zie Navigatie-eigenschappen met één waarde voor meer informatie.

parentcustomerid is de logische naam van een opzoekkolom in de tabel met contactpersonen. Alle zoekacties hebben een of meer navigatie-eigenschappen met één waarde in OData. De namen van de opzoekeigenschappen komen niet altijd overeen met de bijbehorende naam van de navigatie-eigenschap met één waarde.

In dit geval is de parentcustomerid kolom een opzoektype voor klanten, een soort opzoekactie met meerdere tabellen die kan worden gekoppeld aan het account of de tabellen met contactpersonen. Ter ondersteuning van deze klantzoekactie zijn er twee afzonderlijke relaties en elk heeft een andere navigatie-eigenschap met één waarde. In dit geval is parentcustomerid_accountde juiste navigatie-eigenschap met één waarde.

Hoe u vermijdt

Controleer of de naam van de navigatie-eigenschap die u gebruikt, bestaat in het CSDL-$metadata-document. Zie De navigatie-eigenschappen van de web-API, met name de sectie Zoekopdrachten met meerdere tabellen voor meer informatie.

InnerException : System.ArgumentException: Stream was niet leesbaar

Deze fout treedt op bij het uitvoeren van batchbewerkingen.

Symptomen

U krijgt de volgende foutmelding bij het verzenden van een $batch aanvraag.

Antwoord

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

Oorzaak

Het gebruik van andere regeleinden dan CRLF in de hoofdtekst van de batchaanvraag veroorzaakt deze deserialisatiefout.

Afhankelijk van de editor die u gebruikt, kunnen deze niet-afdrukbare tekens moeilijk te zien zijn. Als u Kladblok++ gebruikt, kunt u de optie Alle tekens weergeven gebruiken om deze tekens zichtbaar te maken.

Deze nettolading werkt:

Schermopname van de hoofdtekst van een batchaanvraag met CRLF-einden voor alle regels.

Deze nettolading mislukt omdat de laatste regel niet eindigt op CRLF.

Schermopname van een hoofdtekst van een batchaanvraag met CRLF ontbreekt op de laatste regel.

In dit geval hoeft u alleen maar een regelterugloop toe te voegen aan het einde van de laatste regel om deze te laten slagen.

Hoe u vermijdt

Zorg ervoor dat alle regeleinden in de $batch aanvraagbody liggen CRLF. Als u deze fout niet kunt gebruiken CRLF, voegt u twee niet-regeleindenCRLF toe aan het einde van de hoofdtekst van de batchaanvraag om deze deserialisatiefout op te lossen. Zie Batch-aanvragen voor meer informatie.

Er is een fout opgetreden in de waarde 'odata.include-annotaations' in de header 'Prefer'.

Symptomen

De fout treedt op wanneer de Dataverse-web-API een aanvraag ontvangt met een ongeldige odata.include-annotations waarde in de waarde van de Prefer aanvraagheader. Dit probleem treedt op wanneer de aanvraag wordt verzonden met behulp van de POST, PATCHof GETPUTHTTP-methoden met een Prefer aanvraagheader die een ongeldige of onjuist opgemaakte waarde bevat.

In het volgende voorbeeld bevat de odata.include-annotations waarde onjuist backslashes (\) om de aanhalingstekens te ontsnappen.

Aanvragen

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"
}

Oorzaak

Om een veiligere service te bieden, lossen we een probleem op waarbij ongeldige Prefer aanvraagheaderwaarden zonder validatie worden verwerkt wanneer de POST, PATCHof PUT HTTP-methoden worden gebruikt. Nu wordt validatie afgedwongen voor alle HTTP-methoden. Deze fout treedt op vanaf Dataverse versie 9.2.2412.3 die begint met de implementatie in januari 2025 en wordt geïmplementeerd in alle regio's in februari 2025.

Hoe u vermijdt

Lees de richtlijnen voor het correct instellen van Prefer-headers in de Dataverse-web-API.

Zie ook