Como permitir o download do arquivo .json com o ASP.NET


125

Como posso habilitar o download de arquivos * .json de um site antigo do ASP.NET (no IIS6, acreditei)?

Estou recebendo uma página 404 em vez do arquivo JSON.

Preciso criar um arquivo web.config? O que há nele?


1
Você provavelmente precisará adicionar um tipo MIME para ele.
vcsjones

1
Para uso em javascript ou para salvar em um hd?
Remy

Eu quero acessá-lo via jQuery.ajax (url: ...
Lea Hayes

2
Acrescentando que, depois que o IIS local tiver uma listagem, na sua próxima implantação, poderá ocorrer um erro de 500 servidores em uma listagem duplicada, para comentar.
21812 Tom Tomardard

Respostas:


118

Adicione o tipo JSON MIME ao IIS 6. Siga as instruções em Configurar tipos MIME do MSDN (IIS 6.0) .

  • Extensão: .json
  • Tipo MIME: application / json

Não se esqueça de reiniciar o IIS após a alteração.

ATUALIZAÇÃO: Existem maneiras fáceis de fazer isso no IIS7 e mais recentes. O op pediu especificamente a ajuda do IIS6, então estou deixando esta resposta como está. Mas essa resposta ainda está recebendo muito tráfego, embora o IIS6 seja muito antigo agora. Espero que você esteja usando algo mais novo, então eu gostaria de mencionar que, se você tiver uma versão mais recente do IIS7 ou mais recente, consulte a resposta da @ ProVega abaixo para obter uma solução mais simples para essas versões mais recentes.


1
Felicidades, mas isso é em um pacote de hospedagem compartilhada sem acesso a qualquer coisa que não web.config ou arquivo de código global
Lea Hayes

Se você não tiver acesso às configurações do IIS 6.0 e o suporte do seu provedor não adicionar o tipo MIME para você, será necessário alternar entre provedores ou para servidores mais recentes com o IIS 7.0 nesse provedor, se eles o oferecerem, para apoiar isso.
John Adams

1
Sim, o ASP.Net pode transmitir o arquivo por meio de um manipulador ASPX ou até mesmo uma página simples, mas você não poderá usar o tipo de arquivo .json na URL, pois não passará essa solicitação para o ASP.Net tempo de execução. Terá que ser algo que passe pelo tempo de execução do ASPX. Se você não tiver acesso às configurações do IIS, terá que ser uma das extensões existentes, como .ASPX. Novamente, a mudança para um servidor com IIS7 oferece muitas soluções mais fáceis e fáceis.
John Adams

1
Reiniciar o pool de aplicativos deve ser suficiente (no meu caso), em vez de reiniciar o IIS completamente.
kltft 27/01

1
@kltft True, uma reinicialização do pool de aplicativos acionará a atualização, mas apenas para esse pool, é claro. Essas etapas incluem alterar a configuração para todos, e tê-las em um nível inconsistente de configurações facilmente levaria a confusão posteriormente. Eu recomendo reiniciar todo o processo iis para segurança e sanidade. Porém, se todos concordarem com os prós / contras, uma reinicialização do pool de aplicativos poderá funcionar.
Jon Adams

211

Se você deseja adicionar manualmente suporte ao seu site, basta adicionar o seguinte ao seu web.config na seção system.webServer :

<staticContent>
    <mimeMap fileExtension=".json" mimeType="application/json" />
</staticContent>

Isso adicionará uma configuração "local" no IIS. Isso não funciona no IIS6, mas funciona no IIS7 e mais recente.


6
Atualizou sua resposta para incluir o web.configcaminho completo .
GFoley83 #

Salva-vidas, obrigado :)
Gaurav123

1
Por alguma razão, isso atrapalhou meu site inteiro - o css não funcionou mais!
precisa saber é o seguinte

@ TheJeff - isso aconteceu comigo, mas é porque eu adicionei dois estáticos mimeMap, um para JSON (necessário) e outro para CSV (redundante, presumi que fosse necessário, mas o IISExpress applicationConfig já tinha CSV). Portanto, recebi esse erro a qualquer momento que tentei acessar qualquer arquivo estático: Cannot add duplicate collection entry of type 'mimeMap' with unique key attribute 'fileExtension' set to '.csv' Depois de remover a duplicata, não há problema.
The Red Pea

1
Isso corrigirá o problema ao executar localmente, mas preste atenção ao pressionar ao vivo. Se o mimeMap já estiver configurado globalmente no IIS, você receberá 500 erros. Simplesmente remova esta peça do seu web.config nesse caso.
Evan

20

A solução é que você precisa adicionar o tipo de extensão de arquivo json nos tipos MIME

Método 1

Vá para IIS, selecione seu aplicativo e encontre tipos MIME

insira a descrição da imagem aqui

Clique no painel Adicionar da direita

Extensão de nome de arquivo = .json

Tipo MIME = application / json

insira a descrição da imagem aqui

Depois de adicionar o tipo de arquivo .json em Tipos MIME , reinicie o IIS e tente acessar o arquivo json


Método 2

Vá para web.config desse aplicativo e adicione essas linhas nele

 <system.webServer>
   <staticContent>
     <mimeMap fileExtension=".json" mimeType="application/json" />
   </staticContent>
 </system.webServer>

15

Ao adicionar suporte ao mimetype (como sugerido pelo @ProVega), também é recomendável remover o tipo antes de adicioná-lo - isso evita erros inesperados ao implantar em servidores nos quais já existe suporte para o tipo, por exemplo:

<staticContent>
    <remove fileExtension=".json" />
    <mimeMap fileExtension=".json" mimeType="application/json" />
</staticContent>

Quando você adiciona apenas o MimeMap, às vezes, remover seus estilos CSS, então, o caminho correto é removê-lo em primeiro lugar, muito obrigado
sgrysoft

Caminho para o arquivo de configuração no arquivo IIS7 C:\Windows\System32\inetsrv\config: applicationHost.config
OO

5

Só tive esse problema, mas tive que encontrar a configuração do IIS Express para que eu pudesse adicionar os tipos MIME. Para mim, ele estava localizado em C:\Users\<username>\Documents\IISExpress\config\applicationhost.confige pude adicionar o "mapa mímico" correto lá.


Pode ser por isso que não está funcionando para mim através do IIS Express. Infelizmente, isso não é algo que eu gostaria de configurar em todas as máquinas de desenvolvimento, então parece que eu recomendo continuar com a extensão .js nos arquivos de configuração do json.
jpierson

Você também pode fazê-lo no Web.Config - Veja esta resposta stackoverflow.com/a/19517275/643761
Simcha Khabinsky 9/14

@SimchaKhabinsky Para mim, o web.config não foi suficiente.
Jean-Bernard Pellerin

3
Se o web.config não é suficiente, você pode precisar adicionar esta linha antes do <mimeMap>nó: <remove fileExtension=".json" />. Você não precisa tocar no applicationhost.config (ou machine.config). Dito isto, modificar esses arquivos pode ser útil se você criar novos sites com frequência e não desejar modificar o web.config para cada site. Isso pode funcionar para ambientes de desenvolvimento, mas frequentemente você não pode tocar no machine.config em ambientes de produção, então eu ainda recomendaria fazer a alteração no web.config.
precisa saber é o seguinte

1
Obrigado @ gilly3 - o removeera a chave para mim
harriyott

0
  1. Navegue para C: \ Users \ nome de usuário \ Documents \ IISExpress \ config
  2. Abra applicationhost.config com o Visual Studio ou seu editor de texto favorito.
  3. Procure a palavra mimeMap, você deve encontrar muitos deles.
  4. Adicione a seguinte linha ao topo da lista:.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.