Felsöka klientfel för Dataverse Web API
I den här artikeln beskrivs vanliga klientfel som kan uppstå när du använder Dataverse Web API och hur du kan undvika dem.
Det går inte att hitta resursen för segmentet
Symptom
Begär
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'."
}
}
Orsak
Det här felet uppstår när du använder det felaktiga namnet på en resurs. Resursen kan vara namnet på en entitetsuppsättning, en funktion eller en åtgärd. Dessa resursnamn är skiftlägeskänsliga. I föregående exempel finns det en entitetsuppsättning med namnet accounts
, men inte en med namnet Account
.
Om resursen är en åtgärd som definierats som en anpassad processåtgärd kan det här felet också inträffa om den anpassade processåtgärden är inaktiv.
Så här undviker du
- Om resursen är en entitetstyp frågar du webb-API Service-dokumentet som innehåller en lista över alla kända namn på entitetsuppsättningar.
- Om resursen är en funktion eller åtgärd kontrollerar du att namnet du använder finns i CSDL-$metadata dokumentet.
- Om åtgärden inte finns i CSDL-$metadata dokument kan det vara en inaktiv anpassad processåtgärd. Du bör kontrollera att den är aktiv.
Det gick inte att hitta en egenskap med namnet {property name} på typen Microsoft.Dynamics.CRM. {entitetsnamn}'
Symptom
Begär
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'."
}
}
Orsak
Det här felet uppstår när du använder det felaktiga namnet för en egenskap. Egenskapsnamn är skiftlägeskänsliga.
I föregående exempel finns det en egenskap som heter name
, men inte en med namnet Name
.
Så här undviker du
Kontrollera att namnet som du använder finns i DOKUMENTET CSDL $metadata. Mer information finns i Egenskaper för webb-API.
Det gick inte att hitta någon HTTP-resurs som matchar begärande-URI:n
Symptom
Begär
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'."
}
}
Orsak
Det här felet uppstår när den felaktiga HTTP-metoden tillämpas på en funktion eller åtgärd. I det här fallet kräver funktionen WhoAmI användning av GET
men POST
används.
Så här undviker du
Tänk på vilken typ av OData-åtgärd du använder och vilken HTTP-metod som ska användas. Mer information finns i:
Ogiltig egenskap {egenskapsnamn} hittades i entiteten Microsoft.Dynamics.CRM. {entitetsnamn}'
Symptom
Begär
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>"
}
}
Orsak
Det här felet beror på att det felaktiga namnet på en egenskap användes. Egenskapsnamn är skiftlägeskänsliga och Name
användes i stället name
för .
Så här undviker du
Kontrollera att egenskapsnamnet som du använder finns i DOKUMENTET CSDL $metadata. Mer information finns i Egenskaper för webb-API.
Fel som identifierats i Nyttolast som tillhandahålls av användaren för entiteten {entitetsnamn}
Det finns två separata problem som kan uppstå med det här felet. Skillnaden finns i InnerException.
- InnerException : Microsoft.OData.ODataException: En odeklarerad egenskap [...] hittades i nyttolasten.
- InnerException : System.ArgumentException: Stream kunde inte läsas.
InnerException : Microsoft.OData.ODataException: En odeklarerad egenskap [...] hittades i nyttolasten
Det här felet uppstår när ett ogiltigt namn på navigeringsegenskapen skickas med en begäran.
Symptom
Begär
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>".
}
}
Orsak
Det här felet beror på att det inte finns någon navigeringsegenskap med ett enda värde i kontaktentitetstypen med namnet parentcustomerid
. Mer information finns i Navigeringsegenskaper med enkelvärde.
parentcustomerid
är det logiska namnet på en uppslagskolumn i kontakttabellen. Alla sökningar har en eller flera navigeringsegenskaper med enkelvärde i OData. Namnen på uppslagsegenskaperna matchar inte alltid motsvarande namn på envärdesnavigeringsegenskap.
I det här fallet parentcustomerid
är kolumnen en kundsökningstyp, en typ av uppslag med flera tabeller som kan länka till antingen konto- eller kontakttabellerna. För att stödja den här kundsökningen finns det två separata relationer och var och en har en annan navigeringsegenskap med en enda värde. Rätt navigeringsegenskap med ett värde i det här fallet är parentcustomerid_account
.
Så här undviker du
Kontrollera att namnet på navigeringsegenskapen som du använder finns i dokumentet CSDL $metadata. Mer information finns i Navigeringsegenskaper för webb-API, särskilt avsnittet Flertabellsökningar.
InnerException : System.ArgumentException: Stream kunde inte läsas
Det här felet uppstår vid körning av batchåtgärder.
Symptom
Du får följande fel när du skickar en $batch
begäran.
Response
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--
Orsak
Användning av andra radslut än CRLF i brödtexten för batchbegäran orsakar det här deserialiseringsfelet.
Beroende på vilken redigerare du använder kan dessa tecken som inte skrivs ut vara svåra att se. Om du använder Anteckningar++, kan du använda alternativet Visa alla tecken för att göra dessa tecken synliga.
Den här nyttolasten fungerar:
Den här nyttolasten misslyckas eftersom den sista raden inte slutar med CRLF
.
I det här fallet räcker det med att bara lägga till en vagnretur i slutet av den sista raden för att det ska lyckas.
Så här undviker du
Kontrollera att alla radslut i begärandetexten $batch
är CRLF
. Om du inte kan använda CRLF
lägger du till två icke-radslutCRLF
i slutet av brödtexten för batchbegäran för att lösa det här deserialiseringsfelet. Mer information finns i Batch-begäranden.
Fel som identifierats för värdet "odata.include-annotations" i "Prefer"-huvudet
Symptom
Felet uppstår när Dataverse Web API tar emot en begäran med ett ogiltigt odata.include-annotations
värde i värdet för begärandehuvudet Prefer
. Det här problemet uppstår när begäran skickas med metoderna POST
, PATCH
, PUT
, eller GET
HTTP med ett Prefer
begärandehuvud som innehåller ett ogiltigt eller felaktigt formaterat värde.
I följande exempel odata.include-annotations
innehåller värdet felaktigt omvänt snedstreck (\) för att undvika citattecken.
Begär
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"
}
Orsak
För att tillhandahålla en säkrare tjänst löser vi ett problem där ogiltiga Prefer
värden för begärandehuvud bearbetas utan validering när metoderna , PATCH
eller PUT
HTTP användsPOST
. Nu tillämpas valideringen för alla HTTP-metoder. Det här felet uppstår från och med Dataverse version 9.2.2412.3 som börjar distribueras i januari 2025 och distribueras till alla regioner i februari 2025.
Så här undviker du
Läs vägledningen om hur du ställer in Prefer-huvuden korrekt i Dataverse Web API.