Usando a API da Web mais recente do ASP.NET , no Chrome , estou vendo o XML - como posso alterá-lo para solicitar o JSON para que eu possa visualizá-lo no navegador? Eu acredito que é apenas parte dos cabeçalhos da solicitação, estou correto nisso?
json
google-chrome
asp.net-web-api
naspinski
fonte
fonte
Respostas:
Acabei de adicionar o seguinte na
App_Start / WebApiConfig.cs
aula no meu projeto de MVC Web API .Isso garante que você obtenha o JSON na maioria das consultas, mas poderá obtê-
XML
lo quando enviartext/xml
.Se você precisa ter a resposta
Content-Type
comoapplication/json
por favor, verifique a resposta de Todd abaixo .NameSpace
está usandoSystem.Net.Http.Headers
.fonte
Content-Type
cabeçalho da resposta ainda estarátext/html
.Se você fizer isso no
WebApiConfig
JSON, obterá JSON por padrão, mas ainda permitirá que você retorne XML se você passartext/xml
como oAccept
cabeçalho da solicitaçãoSe você não estiver usando o tipo de projeto MVC e, portanto, não tiver essa classe, consulte esta resposta para obter detalhes sobre como incorporá-la.
fonte
application/xml
com uma prioridade de 0,9 e*/*
com uma prioridade de 0,8. Ao remover,application/xml
você remove a capacidade da API da Web retornar XML, se o cliente solicitar isso especificamente. por exemplo, se você enviar "Accept: application / xml", você ainda receberá JSON.O uso do RequestHeaderMapping funciona ainda melhor, porque também define o
Content-Type = application/json
cabeçalho de resposta, o que permite ao Firefox (com o complemento JSONView) formatar a resposta como JSON.fonte
Eu gosto mais da abordagem de Felipe Leusin - certifique-se de que os navegadores obtenham JSON sem comprometer a negociação de conteúdo de clientes que realmente desejam XML. A única peça que faltava para mim era que os cabeçalhos de resposta ainda continham o tipo de conteúdo: text / html. Por que isso foi um problema? Porque eu uso a extensão JSON Formatter Chrome , que inspeciona o tipo de conteúdo, e não recebo a formatação bonita com a qual estou acostumado. Corrigi isso com um formatador simples e personalizado que aceita solicitações de texto / html e retorna respostas application / json:
Registre-se assim:
fonte
this.SerializerSettings.Formatting = Formatting.Indented;
se você deseja que ele seja impresso sem uma extensão do navegador.using System.Net.Http.Formatting
eusing Newtonsoft.Json
Dica rápida do MVC4 nº 3 - Removendo o formatador XML da API da Web do ASP.Net
Em
Global.asax
adicionar a linha:igual a:
fonte
No WebApiConfig.cs , adicione ao final da função Register :
Fonte .
fonte
No Global.asax , estou usando o código abaixo. Meu URI para obter JSON é
http://www.digantakumar.com/api/values?json=true
fonte
Veja a negociação de conteúdo na WebAPI. Esses posts ( parte 1 e parte 2 ) maravilhosamente detalhados e detalhados explicam como funciona.
Em resumo, você está certo e só precisa definir os cabeçalhos
Accept
ouContent-Type
solicitar. Como sua ação não está codificada para retornar um formato específico, você pode configurá-loAccept: application/json
.fonte
Como a pergunta é específica do Chrome, você pode obter a extensão Postman, que permite definir o tipo de conteúdo da solicitação.
fonte
network.http.accept.default
configuração paratext/html,application/xhtml+xml,application/json;q=0.9,application/xml;q=0.8,*/*;q=0.7
.text/html,application/xhtml+xml;q=1.0,*/*;q=0.7
para evitar que hosts com erros, como o Bitbucket, atendam acidentalmente o JSON do navegador em vez de HTML.Uma opção rápida é usar a especialização MediaTypeMapping. Aqui está um exemplo do uso de QueryStringMapping no evento Application_Start:
Agora, sempre que o URL contiver a string de consulta? A = b, nesse caso, a resposta Json será mostrada no navegador.
fonte
Esse código faz do json meu padrão e me permite usar o formato XML também. Vou apenas acrescentar o
xml=true
.Obrigado a todos!
fonte
Não use seu navegador para testar sua API.
Em vez disso, tente usar um cliente HTTP que permita especificar sua solicitação, como CURL ou mesmo o Fiddler.
O problema com esse problema está no cliente, não na API. A API da web se comporta corretamente, de acordo com a solicitação do navegador.
fonte
A maioria das respostas acima faz todo sentido. Como você vê dados sendo formatados no formato XML, isso significa que o formatador XML é aplicado, portanto, você pode ver o formato JSON apenas removendo o XMLFormatter do parâmetro HttpConfiguration, como
já que JSON é o formato padrão
fonte
Usei um filtro de ação global para remover
Accept: application/xml
quando oUser-Agent
cabeçalho contém "Chrome":Parece funcionar.
fonte
Achei o aplicativo Chrome "Advanced REST Client" excelente para trabalhar com serviços REST. Você pode definir o Tipo de conteúdo para,
application/json
entre outras coisas: Cliente REST avançadofonte
O retorno do formato correto é feito pelo formatador de tipo de mídia. Como outros mencionados, você pode fazer isso na
WebApiConfig
classe:Para mais, verifique:
Caso suas ações estejam retornando XML (que é o caso por padrão) e você precise apenas de um método específico para retornar JSON, poderá usar um
ActionFilterAttribute
e aplicá-lo a essa ação específica.Atributo de filtro:
Aplicando à ação:
Observe que você pode omitir a palavra
Attribute
na decoração da ação e usar apenas em[JsonOutput]
vez de[JsonOutputAttribute]
.fonte
fonte
conforme a versão mais recente do ASP.net WebApi 2,
abaixo
WebApiConfig.cs
, isso vai funcionarfonte
Não está claro para mim por que existe toda essa complexidade na resposta. Claro, existem várias maneiras de fazer isso, com QueryStrings, cabeçalhos e opções ... mas o que eu acredito ser a melhor prática é simples. Você solicita uma URL simples (ex:)
http://yourstartup.com/api/cars
e, em troca, obtém JSON. Você obtém o JSON com o cabeçalho de resposta adequado:Ao procurar uma resposta para essa mesma pergunta, encontrei esse tópico e tive que continuar porque essa resposta aceita não funciona exatamente. Eu encontrei uma resposta que considero simples demais para não ser a melhor:
Defina o formatador WebAPI padrão
Vou adicionar minha dica aqui também.
Eu tenho uma pergunta de onde vêm os padrões (pelo menos os que estou vendo). Eles são padrões do .NET ou talvez criados em outro lugar (por outra pessoa no meu projeto). De qualquer forma, espero que isso ajude.
fonte
Aqui está uma solução semelhante à de jayson.centeno e outras respostas, mas usando a extensão interna de
System.Net.Http.Formatting
.A solução foi voltada principalmente para o suporte ao formato $ para OData nas primeiras versões do WebApi, mas também se aplica à implementação não OData e retorna o
Content-Type: application/json; charset=utf-8
cabeçalho na resposta.Ele permite a aderência
&$format=json
ou&$format=xml
o final da sua uri ao testar com um navegador. Ele não interfere com outro comportamento esperado ao usar um cliente que não é do navegador, onde você pode definir seus próprios cabeçalhos.fonte
Você pode usar como abaixo:
fonte
Basta adicionar essas duas linhas de código na sua classe WebApiConfig
fonte
Você acabou de mudar o
App_Start/WebApiConfig.cs
seguinte:fonte
Do MSDN Criando um aplicativo de página única com ASP.NET e AngularJS (aproximadamente 41 minutos).
Deve ser atual, eu tentei e funcionou.
fonte
Algum tempo se passou desde que essa pergunta foi feita (e respondida), mas outra opção é substituir o cabeçalho Accept no servidor durante o processamento da solicitação usando um MessageHandler, como abaixo:
Onde
someOtherCondition
pode haver qualquer coisa, incluindo o tipo de navegador, etc. Isso seria para casos condicionais em que apenas às vezes queremos substituir a negociação de conteúdo padrão. Caso contrário, como em outras respostas, você simplesmente removeria um formatador desnecessário da configuração.Você precisará registrá-lo, é claro. Você pode fazer isso globalmente:
ou em uma rota por rota:
E como esse é um manipulador de mensagens, ele será executado nas extremidades de solicitação e resposta do pipeline, como um
HttpModule
. Assim, você pode reconhecer facilmente a substituição com um cabeçalho personalizado:fonte
Aqui está a maneira mais fácil que eu usei em meus aplicativos. Adicione abaixo de 3 linhas de código
App_Start\\WebApiConfig.cs
emRegister
funçãoA API da web do Asp.net serializa automaticamente o objeto retornado para JSON e, conforme
application/json
é adicionado no cabeçalho, para que o navegador ou o destinatário entenda que você está retornando o resultado JSON.fonte
WebApiConfig é o local em que você pode configurar se deseja gerar em json ou xml. por padrão, é xml. na função de registro, podemos usar os Formadores de Configuração Http para formatar a saída. System.Net.Http.Headers => MediaTypeHeaderValue ("text / html") é necessário para obter a saída no formato json.
fonte
Usando a resposta de Felipe Leusin por anos, após uma recente atualização das principais bibliotecas e do Json.Net, encontrei um
System.MissingMethodException
: SupportedMediaTypes. A solução no meu caso, espero que útil para outras pessoas que enfrentam a mesma exceção inesperada, é instalarSystem.Net.Http
. Aparentemente, o NuGet o remove em algumas circunstâncias. Após uma instalação manual, o problema foi resolvido.fonte
Estou surpreso ao ver tantas respostas exigindo que a codificação altere um único caso de uso (GET) em uma API, em vez de usar uma ferramenta adequada, que deve ser instalada uma vez e pode ser usada para qualquer API (própria ou de terceiros) e todas casos de uso.
Portanto, a boa resposta é:
fonte