Jak zezwolić na pobieranie pliku .json za pomocą programu ASP.NET


125

Jak mogę włączyć pobieranie plików * .json ze starej witryny ASP.NET (uważam, że IIS6)?

Otrzymuję stronę 404 zamiast pliku JSON.

Czy muszę utworzyć plik web.config? Co w tym jest?


1
Prawdopodobnie musisz dodać do niego typ MIME .
vcsjones

1
Do użytku w javascript lub do zapisywania na dysku twardym?
Remy

Chcę uzyskać do niego dostęp przez jQuery.ajax (adres URL: ...
Lea Hayes

2
Dodanie tego po tym, jak lokalne usługi IIS mają listę, przy następnym wdrożeniu może spowodować wyświetlenie błędu serwera 500 ze zduplikowanej listy, więc należy go skomentować.
Tom Mallard

Odpowiedzi:


118

Dodaj typ JSON MIME do usług IIS 6. Postępuj zgodnie z instrukcjami podanymi w sekcji Konfigurowanie typów MIME (IIS 6.0) witryny MSDN .

  • Rozszerzenie: .json
  • Typ MIME: application / json

Nie zapomnij o ponownym uruchomieniu usług IIS po zmianie.

AKTUALIZACJA: W usługach IIS7 i nowszych można to łatwo zrobić. Operator specjalnie poprosił o pomoc w usługach IIS6, więc pozostawiam tę odpowiedź bez zmian. Ale ta odpowiedź wciąż generuje duży ruch, mimo że usługi IIS6 są teraz bardzo stare. Mam nadzieję, że używasz czegoś nowszego, więc chciałem wspomnieć, że jeśli masz nowszą wersję IIS7 lub nowszą, zobacz odpowiedź @ ProVega poniżej, aby uzyskać prostsze rozwiązanie dla tych nowszych wersji.


1
Pozdrawiam, ale to jest na współdzielonym pakiecie hostingowym bez dostępu do niczego innego niż web.config lub globalny plik kodu
Lea Hayes

Jeśli nie masz dostępu do ustawień usług IIS 6.0, a pomoc techniczna Twojego dostawcy nie doda typu MIME za Ciebie, będziesz musiał zmienić dostawców lub na nowsze serwery z usługami IIS 7.0 u tego dostawcy, jeśli to oferują, aby wesprzyj to.
Jon Adams

1
Tak, ASP.Net może przekazać plik za pośrednictwem modułu obsługi ASPX lub nawet prostej strony, ale nie będzie można użyć typu pliku .json w adresie URL, ponieważ nie przekaże tego żądania do ASP.Net runtime. Musi to być coś, co przechodzi przez środowisko wykonawcze ASPX. Jeśli nie masz dostępu do ustawień usług IIS, będzie to musiało być jedno z istniejących rozszerzeń, takich jak .ASPX. Ponownie przejście na serwer z usługami IIS7 oferuje znacznie więcej i łatwiejszych rozwiązań.
Jon Adams

1
Ponowne uruchomienie puli aplikacji powinno wystarczyć (tak było w moim przypadku) zamiast całkowitego ponownego uruchamiania usług IIS.
kltft

1
@kltft Prawda, ponowne uruchomienie puli aplikacji wyzwoli aktualizację, ale oczywiście tylko dla tej puli. Kroki te obejmują zmianę ustawień dla wszystkich, a ustawienie ich na niespójnym poziomie ustawień mogłoby później łatwo doprowadzić do zamieszania. Zalecam ponowne uruchomienie całego procesu iis dla bezpieczeństwa i zdrowia psychicznego. Ale w mgnieniu oka, jeśli wszyscy zgodzą się na zalety / wady, ponowne uruchomienie puli aplikacji może zadziałać.
Jon Adams

211

Jeśli chcesz ręcznie dodać obsługę do swojej witryny, możesz po prostu dodać następujące elementy do swojego pliku web.config w sekcji system.webServer :

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

Spowoduje to dodanie konfiguracji „lokalnej” w usługach IIS. To nie działa w usługach IIS6, ale działa w usługach IIS7 i nowszych.


6
Zaktualizowałeś odpowiedź, aby zawierała pełną web.configścieżkę.
GFoley83

Oszczędzanie życia, dziękuję :)
Gaurav123

1
Z jakiegoś powodu zepsuło to całą moją witrynę - css już nie działa!
TheJeff

@TheJeff - to mi się przydarzyło, ale to dlatego, że dodałem dwie staticContent mimeMap, jedną dla JSON (konieczne) i jedną dla CSV (zbędne, zakładałem, że to konieczne, ale applicationConfig IISExpress miał już CSV). Dlatego otrzymałem ten błąd za każdym razem, gdy próbowałem uzyskać dostęp do dowolnego pliku statycznego: Cannot add duplicate collection entry of type 'mimeMap' with unique key attribute 'fileExtension' set to '.csv' Po usunięciu duplikatu nie ma problemu.
The Red Pea

1
To rozwiąże problem podczas uruchamiania lokalnego, ale zachowaj ostrożność podczas przesyłania na żywo. Jeśli mapa mimeMap jest już skonfigurowana globalnie w usługach IIS, otrzymasz 500 błędów. W takim przypadku po prostu usuń ten element z pliku web.config.
Evan,

20

Rozwiązanie polega na tym, że musisz dodać typ rozszerzenia pliku json w typach MIME

Metoda 1

Przejdź do IIS, wybierz swoją aplikację i znajdź typy MIME

wprowadź opis obrazu tutaj

Kliknij Dodaj z prawego panelu

Rozszerzenie nazwy pliku = .json

Typ MIME = application / json

wprowadź opis obrazu tutaj

Po dodaniu .json typ pliku w typów MIME , Restart IIS i próby uzyskania dostępu do pliku json


Metoda 2

Przejdź do web.config tej aplikacji i dodaj do niej te linie

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

15

Dodając obsługę typu MIME (zgodnie z sugestią @ProVega), najlepiej jest również usunąć typ przed dodaniem - ma to zapobiec nieoczekiwanym błędom podczas wdrażania na serwerach, na których obsługa tego typu już istnieje, na przykład:

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

Kiedy dodajesz tylko mimeMap, czasami usuwa to twoje style css, więc właściwym sposobem jest usunięcie go najpierw, wielkie dzięki
sgrysoft

Ścieżka do pliku konfiguracyjnego w pliku IIS7 C:\Windows\System32\inetsrv\config: applicationHost.config
OO

5

Właśnie miałem ten problem, ale musiałem znaleźć konfigurację dla IIS Express, aby dodać typy MIME. Dla mnie znajdowała się pod adresem C:\Users\<username>\Documents\IISExpress\config\applicationhost.configi mogłem tam dodać poprawną „mapę mime”.


Być może dlatego nie działa dla mnie za pośrednictwem IIS Express. Niestety nie jest to coś, co chciałbym konfigurować na każdej maszynie deweloperskiej, więc wygląda na to, że zalecam pozostanie przy rozszerzeniu .js dla plików konfiguracyjnych json.
jpierson

Możesz to również zrobić w Web.Config - spójrz na tę odpowiedź stackoverflow.com/a/19517275/643761
Simcha Khabinsky

@SimchaKhabinsky Dla mnie web.config nie był wystarczający.
Jean-Bernard Pellerin

3
Jeśli web.config nie wystarczy, może trzeba dodać tę linię przed <mimeMap>węzłem: <remove fileExtension=".json" />. Nie powinieneś musieć dotykać pliku applicationhost.config (lub machine.config). Biorąc to pod uwagę, modyfikowanie tych plików może być przydatne, jeśli często tworzysz nowe witryny i nie chcesz modyfikować pliku web.config dla każdej witryny. To może działać w środowiskach deweloperskich, ale często nie możesz dotknąć pliku machine.config w środowiskach produkcyjnych, więc nadal zalecałbym wprowadzenie zmiany w pliku web.config.
gilly3

1
Dzięki @ gilly3 - removeklucz był dla mnie kluczem
harriyott

0
  1. Przejdź do C: \ Users \ nazwa_użytkownika \ Documents \ IISExpress \ config
  2. Otwórz applicationhost.config w programie Visual Studio lub w ulubionym edytorze tekstu.
  3. Wyszukaj słowo mimeMap, powinieneś znaleźć ich dużo.
  4. Dodaj następujący wiersz na górę listy:.
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.