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 name
van .
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.
- InnerException: System.ArgumentException: Stream is niet leesbaar.
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_account
de 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:
Deze nettolading mislukt omdat de laatste regel niet eindigt op CRLF
.
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
, PATCH
of GET
PUT
HTTP-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
, PATCH
of 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.