Partilhar via


Solucionar problemas de erros do cliente da API Web do Dataverse

Este artigo descreve erros comuns de cliente que você pode encontrar ao usar a API Web do Dataverse e como evitá-los.

Recurso não encontrado para o segmento

Sintomas

Solicitar

GET [Organization URI]/api/data/v9.2/Account HTTP/1.1

Resposta

HTTP/1.1 404 Not Found

{
 "error": {
  "code": "0x8006088a",
  "message": "Resource not found for the segment 'Account'."
 }
}

Causa

Esse erro ocorre quando você usa o nome incorreto para um recurso. Esse recurso pode ser o nome de um conjunto de entidades, uma função ou uma ação. Esses nomes de recursos diferenciam maiúsculas de minúsculas. No exemplo anterior, há um conjunto de entidades chamado accounts, mas não um chamado Account.

Se o recurso for uma ação definida como uma ação de processo personalizado, esse erro também poderá ocorrer se a ação de processo personalizado estiver inativa.

Como evitar

  • Se o recurso for um tipo de entidade, consulte o documento do Serviço de API Web que fornece uma lista de todos os nomes de conjuntos de entidades conhecidos.
  • Se o recurso for uma função ou ação, verifique se o nome usado existe no documento $metadata CSDL.
  • Se a ação não existir no documento $metadata CSDL, ela poderá ser uma ação de processo personalizado inativa. Você deve verificar se ele está ativo.

Não foi possível encontrar uma propriedade chamada '{nome da propriedade}' no tipo 'Microsoft.Dynamics.CRM. {nome da entidade}'

Sintomas

Solicitar

GET [Organization URI]/api/data/v9.2/accounts?$select=Name HTTP/1.1

Resposta

HTTP/1.1 400 Bad Request

{
 "error": {
  "code": "0x0",
  "message": "Could not find a property named 'Name' on type 'Microsoft.Dynamics.CRM.account'."
 }
}

Causa

Esse erro ocorre quando você usa o nome incorreto para uma propriedade. Os nomes de propriedade diferenciam maiúsculas de minúsculas.

No exemplo anterior, há uma propriedade chamada name, mas não uma chamada Name.

Como evitar

Verifique se o nome que você usa existe no documento $metadata CSDL. Para obter mais informações, consulte Propriedades da API Web.

Nenhum recurso HTTP foi encontrado que corresponda ao URI da solicitação

Sintomas

Solicitar

POST [Organization URI]/api/data/v9.2/WhoAmI

Resposta

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

Causa

Esse erro ocorre quando o método HTTP incorreto é aplicado a uma função ou ação. Nesse caso, a função WhoAmI requer o uso de GET but POST é usada.

Como evitar

Esteja ciente de que tipo de operação OData você está usando e do método HTTP correto a ser usado. Para saber mais, veja:

A propriedade inválida {nome da propriedade} foi encontrada na entidade 'Microsoft.Dynamics.CRM. {nome da entidade}'

Sintomas

Solicitar

POST [Organization URI]/api/data/v9.2/accounts HTTP/1.1

{
 "Name": "Account name"
}

Resposta

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

Causa

Esse erro ocorre porque o nome incorreto de uma propriedade foi usado. Os nomes de propriedade diferenciam maiúsculas de minúsculas e Name foram usados em vez de name.

Como evitar

Verifique se o nome da propriedade que você usa existe no documento $metadata CSDL. Para obter mais informações, consulte Propriedades da API Web.

Erro identificado na carga fornecida pelo usuário para a entidade '{entity name}'

Há dois problemas separados que podem ocorrer com esse erro. A diferença está no InnerException.

InnerException: Microsoft.OData.ODataException: uma propriedade não declarada [...] foi encontrada na carga

Esse erro ocorre quando um nome de propriedade de navegação inválido é enviado com uma solicitação.

Sintomas

Solicitar

POST [Organization URI]/api/data/v9.2/contacts HTTP/1.1

{
  "firstname":"test",
  "lastname":"contact",
  "parentcustomerid@odata.bind": "accounts(a779956b-d748-ed11-bb44-6045bd01152a)"
}

Resposta

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

Causa

Esse erro ocorre porque não há nenhuma propriedade de navegação de valor único no tipo de entidade de contato chamado parentcustomerid. Para obter mais informações, consulte Propriedades de navegação de valor único.

parentcustomerid é o nome lógico de uma coluna de pesquisa na tabela de contatos. Todas as pesquisas têm uma ou mais propriedades de navegação de valor único no OData. Os nomes das propriedades de pesquisa nem sempre correspondem ao nome da propriedade de navegação de valor único correspondente.

Nesse caso, a parentcustomerid coluna é um tipo de pesquisa de cliente, um tipo de pesquisa de várias tabelas que pode ser vinculada às tabelas de conta ou de contato. Para dar suporte a essa pesquisa de cliente, há duas relações separadas e cada uma tem uma propriedade de navegação de valor único diferente. A propriedade de navegação de valor único correta nesse caso é parentcustomerid_account.

Como evitar

Verifique se o nome da propriedade de navegação que você usa existe no documento $metadata CSDL. Para obter mais informações, consulte Propriedades de navegação da API Web, especialmente a seção Pesquisas de várias tabelas .

InnerException: System.ArgumentException: o fluxo não era legível

Esse erro ocorre ao executar operações em lote.

Sintomas

Você recebe o seguinte erro ao enviar uma $batch solicitação.

Resposta

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

Causa

O uso de terminações de linha diferentes de CRLF no corpo da solicitação em lote causa esse erro de desserialização.

Dependendo do editor que você usa, esses caracteres não imprimíveis podem ser difíceis de ver. Se você usar o Notepad++, poderá usar a opção Mostrar todos os caracteres para tornar esses caracteres visíveis.

Esta carga funciona:

Captura de tela que mostra um corpo de solicitação em lote com terminações CRLF para todas as linhas.

Essa carga falha porque a última linha não termina com CRLF.

Captura de tela que mostra um corpo de solicitação em lote com CRLF ausente na última linha.

Nesse caso, apenas adicionar um retorno de carro no final da última linha é suficiente para que ele seja bem-sucedido.

Como evitar

Certifique-se de que todas as terminações de linha no corpo da $batch solicitação sejam CRLF. Se você não puder usar CRLFo , adicione duas terminações que nãoCRLF sejam de linha no final do corpo da solicitação em lote para resolver esse erro de desserialização. Para obter mais informações, consulte Solicitações em lote.

Erro identificado no valor 'odata.include-annotations' dentro do cabeçalho 'Prefer'

Sintomas

O erro ocorre quando a API Web do Dataverse recebe uma solicitação com um valor inválido odata.include-annotations no valor do cabeçalho da Prefer solicitação. Esse problema ocorre quando a solicitação é enviada usando os POSTmétodos , PATCH, PUT, ou GET HTTP com um Prefer cabeçalho de solicitação que contém um valor inválido ou formatado incorretamente.

No exemplo a seguir, o odata.include-annotations valor inclui incorretamente barras invertidas (\) para escapar dos caracteres de aspas.

Solicitar

POST [Organization URI]/api/data/v9.2/contacts HTTP/1.1

Prefer: odata.include-annotations=\"*\"

{
  "firstname":"test",
  "lastname":"contact"
}

Resposta

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

Causa

Para fornecer um serviço mais seguro, corrigimos um problema em que valores de cabeçalho de solicitação inválidos Prefer são processados sem validação ao usar os POSTmétodos , PATCH, ou PUT HTTP. Agora, a validação é imposta para todos os métodos HTTP. Esse erro ocorre a partir da versão 9.2.2412.3 do Dataverse, que começa a ser implantada em janeiro de 2025 e será implantada em todas as regiões até fevereiro de 2025.

Como evitar

Examine as diretrizes sobre como definir corretamente os cabeçalhos Prefer na API Web do Dataverse.

Confira também