Dela via


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

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

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:

Skärmbild som visar en brödtext för batchbegäran med CRLF-slut för alla rader.

Den här nyttolasten misslyckas eftersom den sista raden inte slutar med CRLF.

Skärmbild som visar en brödtext för batchbegäran där CRLF saknas på den sista raden.

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 CRLFlä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 , PATCHeller 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.

Se även