Opção de consulta do sistema de formato ODATA $ causa uma solicitação ruim 400

StackOverflow https://stackoverflow.com/questions/3604188

  •  25-09-2019
  •  | 
  •  

Pergunta

Eu tenho uma amostra de odata baseada em reflexão muito simples, as execuções bem e gera JSON quando uso o cabeçalho aceita conforme indicado. No entanto, não posso fazer com que funcione com o parâmetro $ formato = json. Sempre que adiciono esse parâmetro, recebo uma solicitação ruim. De acordo com isso, parece que deve funcionar: Texto do link

Observe que outras opções de consulta do sistema, como $ select, funcionam bem. Este é o .NET 4 em execução via VS2010.

Foi útil?

Solução

Usando $format=json Fora da caixa contra um serviço de dados .NET 4 WCF não funcionará, mesmo que a especificação ODATA diga que é suportada. Não sei exatamente por que a Microsoft não o suporta diretamente. Mas há duas soluções alternativas nessa situação - uma se sente um pouco hacky e a outra faz algum sentido.

Primeiro, a solução que parece um pouco hacky é construir um httphandler que intercepta sua solicitação, lê o $format=json parâmetro de consulta e depois adiciona um cabeçalho aceita sua solicitação (enquanto remove o ofensivo $format=json parâmetro). Isso é descrito em esta postagem do blog.

A segunda solução, que parece um pouco melhor, é decorar seu serviço de dados com um [JSONPSupportBehavior] atributo. Isso faz um pouco mais de sentido e é um pouco mais fácil de implementar (já que você não precisa construir um httphandler). Aqui estão alguns links úteis:

  • Postagem do blog descrevendo como usá -lo.
  • Link para download o código -fonte para o [JSONPSupportBehavior]atributo (sim, você terá que construí -lo - não encontrei um download compilado).

Eu gosto da abordagem de atributo, eu só queria que não fosse um download fora do codeplex ... simplesmente não parece que ainda não suportou. Mas essa é apenas minha opinião.

Honestamente, se você tem controle, a melhor abordagem é apenas adicionar um cabeçalho aceita ao seu pedido de application/json, e seu serviço retornará automaticamente os resultados formatados JSON.

Eu espero que isso ajude.

Outras dicas

Quem se depara com isso ... agora você pode usar WCF Data Services Toolkit e herdar da OdataService, em vez de DataService, para ativar automaticamente essa funcionalidade.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top