Cara mengizinkan unduhan file .json dengan ASP.NET

125

Bagaimana saya bisa mengaktifkan unduhan * .json file dari situs ASP.NET lama (IIS6 saya dituntun untuk percaya)?

Saya mendapatkan halaman 404 alih-alih file JSON.

Apakah saya perlu membuat file web.config? Apa yang ada di dalamnya?

Lea Hayes
sumber
1
Anda mungkin perlu menambahkan tipe MIME untuk itu.
vcsjones
1
Untuk digunakan dalam javascript atau untuk menghemat hd?
Remy
Saya ingin mengaksesnya melalui jQuery.ajax (url: ...
Lea Hayes
2
Menambahkan bahwa setelah IIS lokal memiliki daftar, pada penyebaran Anda berikutnya itu dapat menimbulkan kesalahan 500 server dari daftar duplikat sehingga kemudian berkomentar.
Tom Mallard

Jawaban:

118

Tambahkan tipe JSON MIME ke IIS 6. Ikuti petunjuk di Configure MIME Types MSDN (IIS 6.0) .

  • Ekstensi: .json
  • Jenis MIME: application / json

Jangan lupa untuk me-restart IIS setelah perubahan.

PEMBARUAN: Ada cara mudah untuk melakukan ini di IIS7 dan yang lebih baru. Operasi khusus meminta bantuan IIS6 jadi saya meninggalkan jawaban ini apa adanya. Tetapi jawaban ini masih mendapatkan banyak lalu lintas meskipun IIS6 sudah sangat tua sekarang. Semoga Anda menggunakan sesuatu yang lebih baru, jadi saya ingin menyebutkan bahwa jika Anda memiliki IIS7 yang lebih baru atau versi yang lebih baru lihat jawaban @ ProVega di bawah ini untuk solusi yang lebih sederhana untuk versi yang lebih baru.

Jon Adams
sumber
1
Sorakan tetapi ini adalah pada paket hosting bersama tanpa akses ke apa pun selain web.config atau file kode global
Lea Hayes
Jika Anda tidak memiliki akses ke pengaturan IIS 6.0, dan dukungan penyedia Anda tidak akan menambahkan jenis MIME untuk Anda, maka Anda harus beralih penyedia, atau ke server yang lebih baru dengan IIS 7.0 pada penyedia itu jika mereka menawarkannya, untuk dukung ini.
Jon Adams
1
Ya, ASP.Net dapat meneruskan file melalui ASPX handler atau bahkan halaman sederhana, tetapi Anda tidak akan dapat menggunakan tipe file .json di URL karena itu tidak akan mengirimkan permintaan itu ke ASP.Net runtime. Itu harus menjadi sesuatu yang melewati runtime ASPX. Jika Anda tidak memiliki akses ke pengaturan IIS, itu harus menjadi salah satu dari ekstensi yang ada .ASPX. Sekali lagi, beralih ke server dengan IIS7 menawarkan banyak solusi yang lebih mudah.
Jon Adams
1
Memulai ulang kumpulan aplikasi harus memadai (dalam kasus saya), daripada memulai ulang IIS sama sekali.
kltft
1
@kltft Benar, restart apppool akan memicu pembaruan, tetapi hanya untuk kumpulan itu saja. Langkah-langkah ini termasuk mengubah pengaturan untuk semua orang, dan membuatnya dalam tingkat pengaturan yang tidak konsisten akan dengan mudah menyebabkan kebingungan nantinya. Saya sarankan memulai kembali seluruh proses iis untuk keselamatan dan kewarasan. Tetapi dalam keadaan darurat, jika semua orang setuju dengan pro / kontra, restart apppool bisa bekerja.
Jon Adams
211

Jika Anda ingin secara manual menambahkan dukungan ke situs Anda, Anda bisa menambahkan yang berikut ke web.config di bagian system.webServer :

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

Ini akan menambahkan konfigurasi "lokal" di bawah IIS. Ini tidak berfungsi di IIS6, tetapi bekerja di IIS7 dan yang lebih baru.

ProVega
sumber
6
Memperbarui jawaban Anda untuk menyertakan web.configpath lengkap .
GFoley83
Life saver, Terima kasih :)
Gaurav123
1
Untuk beberapa alasan, ini mengacaukan seluruh situs saya - css tidak lagi berfungsi!
TheJeff
@TheJeff - itu terjadi pada saya, tapi itu karena saya menambahkan dua staticContent mimeMap, satu untuk JSON (perlu) dan satu untuk CSV (berlebihan, saya menganggap itu perlu, tetapi applicationConfig IISExpress sudah punya CSV). Oleh karena itu saya mendapatkan kesalahan ini kapan saja saya mencoba mengakses file static: Cannot add duplicate collection entry of type 'mimeMap' with unique key attribute 'fileExtension' set to '.csv' Setelah saya menghapus duplikatnya, tidak ada masalah.
Kacang Merah
1
Ini akan memperbaiki masalah saat dijalankan secara lokal, tetapi perhatikan saat mendorong langsung. Jika mimeMap sudah dikonfigurasi secara global di IIS, Anda akan mendapatkan 500 kesalahan. Cukup hapus bagian ini dari web.config Anda dalam hal ini.
Evan
20

Solusinya adalah Anda perlu menambahkan jenis ekstensi file json di Jenis MIME

Metode 1

Buka IIS, Pilih aplikasi Anda dan Temukan Jenis MIME

masukkan deskripsi gambar di sini

Klik Tambah dari panel Kanan

Ekstensi Nama File = .json

Jenis MIME = application / json

masukkan deskripsi gambar di sini

Setelah menambahkan jenis file .json di Jenis MIME , Restart IIS dan coba akses file json


Metode 2

Buka web.config aplikasi itu dan tambahkan baris ini di dalamnya

 <system.webServer>
   <staticContent>
     <mimeMap fileExtension=".json" mimeType="application/json" />
   </staticContent>
 </system.webServer>
Kaushal Khamar
sumber
15

Saat menambahkan dukungan untuk mimetype (seperti yang disarankan oleh @ProVega) maka itu juga merupakan praktik terbaik untuk menghapus jenis sebelum menambahkannya - ini adalah untuk mencegah kesalahan tak terduga ketika menggunakan ke server di mana dukungan untuk jenis tersebut sudah ada, misalnya:

<staticContent>
    <remove fileExtension=".json" />
    <mimeMap fileExtension=".json" mimeType="application/json" />
</staticContent>
Mark Cooper
sumber
Ketika Anda hanya menambahkan mimeMap, kadang-kadang menghapus gaya css Anda, jadi, cara yang benar adalah menghapusnya terlebih dahulu, terima kasih banyak
sgrysoft
Path ke file config di file IIS7 C:\Windows\System32\inetsrv\config: applicationHost.config
OO
5

Baru saja mengalami masalah ini tetapi harus menemukan konfigurasi untuk IIS Express sehingga saya dapat menambahkan tipe mime. Bagi saya, itu terletak di C:\Users\<username>\Documents\IISExpress\config\applicationhost.configdan saya dapat menambahkan "peta mime" yang benar di sana.

longda
sumber
Ini mungkin mengapa itu tidak bekerja untuk saya melalui IIS Express. Sayangnya ini bukan sesuatu yang saya ingin konfigurasi pada setiap mesin dev jadi sepertinya saya akan merekomendasikan tetap dengan ekstensi .js untuk file konfigurasi json.
jpierson
Anda juga dapat melakukannya di Web.Config - Lihat jawaban ini stackoverflow.com/a/19517275/643761
Simcha Khabinsky
@SimchaKhabinsky Bagiku web.config tidak cukup.
Jean-Bernard Pellerin
3
Jika web.config tidak cukup, Anda mungkin perlu menambahkan baris ini sebelum <mimeMap>simpul: <remove fileExtension=".json" />. Anda tidak harus menyentuh applicationhost.config (atau machine.config). Yang sedang berkata, memodifikasi file-file itu mungkin berguna jika Anda sering membuat situs baru dan tidak ingin harus memodifikasi web.config untuk setiap situs. Itu mungkin bekerja untuk lingkungan dev, tetapi seringkali Anda tidak dapat menyentuh machine.config di lingkungan produksi, jadi saya masih akan merekomendasikan untuk membuat perubahan di web.config.
gilly3
1
Terima kasih @ gilly3 - removeitu adalah kunci bagi saya
harriyott
0
  1. Arahkan ke C: \ Users \ username \ Documents \ IISExpress \ config
  2. Buka applicationhost.config dengan Visual Studio atau editor teks favorit Anda.
  3. Cari kata mimeMap, Anda harus menemukan banyak dari mereka.
  4. Tambahkan baris berikut ke bagian atas daftar:.
pratik godha
sumber