Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 24777|Resposta: 3

[WebAPI] A WebAPI personaliza o formato dos dados de retorno

[Copiar link]
Publicado em 30/11/2017 11:00:16 | | | |
Recentemente, ao usar WebAPI, o navegador acessa a WebAPI, e o padrão é o formato XML; acho que esse formato de dados deveria ser personalizável pelo usuário, permitindo que o servidor retorne formato XML ou JSON, em vez de configurar código do servidor!



Embora o código do servidor possa ser configurado, não acho que essa fosse a intenção original da WebAPI.

1. Qual tipo de dado a WebAPI retorna por padrão, json ou xml?
2. Como modificar o tipo de dado de retorno da WebAPI
Uso o navegador IE para solicitar que os dados retornados estejam em formato JSON, e que o formato retornado pelo Firefox e Chrome seja XML, e então uso o HttpWebRequest para solicitar que o retorno seja em formato JSON, fiquei me perguntando, por que o mesmo programa, o mesmo arquivo de configuração, por que o formato de dados de saída é diferente, mesmo que seu JSON ou XML padrão de saída possa ser entendido, por que existem navegadores diferentes, o formato de saída é diferente, Depois de pesquisar um pouco, finalmente descobri o motivo

Após testes, foi constatado que os dados retornados pelo navegador IE são json, enquanto o uso do Firefox e Chrome é xml, e constatou-se que o IE não possui o tipo "application/xml" em comparação com Firefox e Chrome quando ocorrem requisições http. Assim, o padrão é o formato json data, enquanto Firefox e Chrome enviam tipos de xml aceitáveis, então os dados xml são retornados, e a seguir está o cabeçalho de requisição do IE, Firefox e Chrome


Aceitar só aparece em Solicitações

O que significa: O tipo de mídia aceitável no navegador


Por exemplo, Aceitar: texto/html significa que o navegador pode aceitar o tipo de retorno do servidor como texto/html, que é comumente chamado de documentos html

Se o servidor não conseguir devolver dados do tipo text/html, o servidor deve devolver um erro 406 (inaceitável)

Coringa * representa qualquer tipo

Por exemplo, Aceitar: */* significa que o navegador pode lidar com todos os tipos (geralmente o navegador envia isso para o servidor)

Por exemplo, Aceitar: text/* significa que todas as subclasses de texto são aceitáveis

Aceitar pode suportar múltiplos tipos de separações

Por exemplo, Aceitar: áudio/*; Q=0.2, áudio/básico indica que navegadores preferem tipos de áudio/mídia básica, mas se não tiverem esse tipo, outros tipos de áudio também podem ser usados

Aqui aparece um q=0,2, que é um valor que representa o grau de associação, e o valor padrão é um, organizado do maior ao menor

Por exemplo, Aceitar: texto/plano; Q=0.5, texto/html, texto/x-dvi; q=0,8, texto/x-c

As prioridades de tipo aceitáveis são as seguintes

1) texto/texto html/x-c

2) texto/x-dvi

3) texto/simples

q é um valor entre 0 e 1, o valor padrão de q é 1, e q=0 significa inaceitável



Por fim, os resultados dos testes:

NavegadorVoltar à formatação  Cabeçalho de aceitar pedido
ouJSONTexto/html, Application/XHTML+XML, */*
ChromeXMLtexto/html,application/xhtml+xml,application/xml; q=0,9,imagem/webp,imagem/apng,*/*; q=0,8
FirefoxXMLtexto/html,application/xhtml+xml,application/xml; q=0,9,*/*; q=0,8,*/*



Continue com os seguintes testes

1. Apenas aceitar:application/json é enviado, e o resultado é retornado json

2. Apenas aceitar:application/xml é enviado, e o resultado retorna xml

3. Envie aceitar: application/xml e application/json ao mesmo tempo, e o resultado retorna json

4. Envie aceitar:application/json e application/xml ao mesmo tempo, e o resultado retorna json

5. Modificar a prioridade e enviar a aplicação/xml ao mesmo tempo. q=1.0,application/json; q=0,9, e o resultado retornou xml

A partir disso, pode-se concluir:

O tipo de retorno do WebAPI é determinado pela aceitação do cabeçalho da requisição, e o tipo padrão de retorno é json
1. Se nem application/json nem application/xml existirem, retorne os dados json
2. Quando apenas application/json estiver disponível, retorne os dados json
3. Quando apenas application/xml está disponível, os dados xml são retornados
4. Quando há application/json e application/json ao mesmo tempo, o tipo de dado retornado é irrelevante para a ordem dos dois; se os dois tiverem a mesma prioridade, json é retornado; e se a prioridade for diferente, o tipo com prioridade maior é retornado



Aceitar a cabeçaTipo de retorno
Application/JSONJSON
Application/XMLXML
application/xml,application/jsonJSON
Application/JSON,Application/XMLJSON
application/xml; q=1.0,application/json; q=1.0JSON
application/xml; q=0,9,application/json; q=0,9JSON
application/xml; q=1.0,application/json; q=0,9XML
application/xml; q=0,9,application/json; q=1.0JSON


Como mostrado abaixo:





Anterior:Python3 implementa tabelas de particionamento horizontal de acesso concorrente
Próximo:.Net MVC implementa polling longo
Publicado em 30/11/2017 11:06:08 |
É incrível, já passei por essa situação antes, mas não pensei no porquê
 Senhorio| Publicado em 30/11/2017 11:07:36 |
QWERTYU Postado em 2017-11-30 11:06
É incrível, já passei por essa situação antes, mas não pensei no porquê

Recomenda-se desencorajar o retorno do formato XML porque, em alguns casos, o retorno do formato JSON é normal e o retorno do formato XML gera uma exceção

Por exemplo, se o valor de retorno for object, o formato JSON de retorno é normal, e o formato XML de retorno reportará um erro
Publicado em 25/04/2018 08:50:44 |
A palestra é muito detalhada, e há pontos de conhecimento, obrigado, foi coletada
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com