วิธีอนุญาตให้ดาวน์โหลดไฟล์. json ด้วย ASP.NET


125

ฉันจะเปิดใช้งานการดาวน์โหลดไฟล์ * .json จากไซต์ ASP.NET เก่าได้อย่างไร (IIS6 ฉันถูกทำให้เชื่อ)

ฉันได้รับหน้า 404 แทนที่จะเป็นไฟล์ JSON

ฉันต้องสร้างไฟล์ web.config หรือไม่ มันเกิดอะไรขึ้น?


1
คุณอาจจะต้องเพิ่มชนิดล้อเลียนสำหรับมัน
vcsjones

1
เพื่อใช้ใน javascript หรือบันทึกลงใน hd?
Remy

ฉันต้องการเข้าถึงผ่าน jQuery.ajax (url: ...
Lea Hayes

2
การเพิ่มว่าหลังจาก IIS ในเครื่องมีรายชื่อแล้วในการปรับใช้ครั้งต่อไปของคุณอาจทำให้เกิดข้อผิดพลาด 500 เซิร์ฟเวอร์จากรายชื่อที่ซ้ำกันดังนั้นจึงแสดงความคิดเห็นออก
Tom Mallard

คำตอบ:


118

เพิ่มประเภท JSON MIME กับ IIS 6. ทำตามคำแนะนำที่MSDN ของประเภทกำหนดค่า MIME (IIS 6.0)

  • นามสกุล: .json
  • ประเภท MIME: application / json

อย่าลืมรีสตาร์ท IIS หลังจากการเปลี่ยนแปลง

อัปเดต: มีวิธีง่ายๆในการดำเนินการนี้บน IIS7 และใหม่กว่า หน่วยปฏิบัติการขอความช่วยเหลือ IIS6 โดยเฉพาะดังนั้นฉันจึงปล่อยให้คำตอบนี้ตามที่เป็นอยู่ แต่คำตอบนี้ยังคงได้รับการเข้าชมแม้ว่า IIS6 จะเก่ามากแล้วก็ตาม หวังว่าคุณจะใช้สิ่งที่ใหม่กว่าดังนั้นฉันอยากจะพูดถึงว่าหากคุณมี IIS7 ที่ใหม่กว่าหรือใหม่กว่าโปรดดูคำตอบของ @ ProVega ด้านล่างเพื่อเป็นวิธีที่ง่ายกว่าสำหรับเวอร์ชันที่ใหม่กว่า


1
ไชโย แต่นี่เป็นแพ็คเกจโฮสติ้งที่ใช้ร่วมกันโดยไม่ต้องเข้าถึงสิ่งอื่นใดนอกจาก web.config หรือไฟล์รหัสส่วนกลาง
Lea Hayes

หากคุณไม่สามารถเข้าถึงการตั้งค่า IIS 6.0 และการสนับสนุนของผู้ให้บริการของคุณจะไม่เพิ่มประเภท MIME ให้คุณคุณจะต้องเปลี่ยนผู้ให้บริการหรือไปยังเซิร์ฟเวอร์ที่ใหม่กว่าด้วย IIS 7.0 บนผู้ให้บริการนั้นหากพวกเขาเสนอให้ สนับสนุนสิ่งนี้
Jon Adams

1
ใช่ ASP.Net สามารถส่งผ่านไฟล์ผ่านตัวจัดการ ASPX หรือแม้แต่เพจธรรมดา แต่คุณจะไม่สามารถใช้ประเภทไฟล์. json ใน URL ได้เนื่องจากจะไม่ส่งคำขอนั้นไปยัง ASP.Net รันไทม์ มันจะต้องเป็นสิ่งที่ผ่านรันไทม์ ASPX หากคุณไม่สามารถเข้าถึงการตั้งค่า IIS จะต้องเป็นหนึ่งในส่วนขยายที่มีอยู่เช่น.ASPX. อีกครั้งการเปลี่ยนไปใช้เซิร์ฟเวอร์ด้วย IIS7 มีวิธีแก้ปัญหาที่ง่ายและหลากหลายมากขึ้น
Jon Adams

1
การรีสตาร์ทพูลแอปควรเพียงพอ (ในกรณีของฉัน) แทนที่จะรีสตาร์ท IIS ทั้งหมด
kltft

1
@kltft True การรีสตาร์ทแอปพูลจะทริกเกอร์การอัปเดต แต่สำหรับพูลนั้นแน่นอน ขั้นตอนเหล่านี้รวมถึงการเปลี่ยนการตั้งค่าสำหรับทุกคนและการตั้งค่าไว้ในระดับการตั้งค่าที่ไม่สอดคล้องกันอาจทำให้เกิดความสับสนในภายหลังได้ง่าย ฉันขอแนะนำให้รีสตาร์ทกระบวนการ iis ทั้งหมดเพื่อความปลอดภัยและมีสติ แต่ถ้าหากทุกคนเห็นด้วยกับข้อดี / ข้อเสียการรีสตาร์ทแอปพูลอาจใช้งานได้
Jon Adams

211

หากคุณต้องการเพิ่มการสนับสนุนให้กับไซต์ของคุณด้วยตนเองคุณสามารถเพิ่มสิ่งต่อไปนี้ใน web.config ของคุณในส่วนsystem.webServer :

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

สิ่งนี้จะเพิ่มการกำหนดค่า "ภายใน" ภายใต้ IIS สิ่งนี้ใช้ไม่ได้ใน IIS6 แต่ทำงานใน IIS7 และใหม่กว่า


6
อัปเดตคำตอบของคุณเพื่อรวมweb.configเส้นทางแบบเต็ม
GFoley83

ช่วยชีวิตขอบคุณ :)
Gaurav123

1
ด้วยเหตุผลบางอย่างสิ่งนี้ทำให้เว็บไซต์ทั้งหมดของฉันยุ่งเหยิง - css ไม่ทำงานอีกต่อไป!
TheJeff

@TheJeff - ที่เกิดขึ้นกับฉัน แต่เป็นเพราะฉันเพิ่ม staticContent mimeMap สองตัวหนึ่งสำหรับ JSON (จำเป็น) และอีกอันสำหรับ CSV (ซ้ำซ้อนฉันคิดว่ามันจำเป็น แต่แอปพลิเคชัน IISExpressConfig มี CSV แล้ว) ดังนั้นฉันจึงได้รับข้อผิดพลาดนี้ทุกครั้งที่พยายามเข้าถึงไฟล์คงที่: Cannot add duplicate collection entry of type 'mimeMap' with unique key attribute 'fileExtension' set to '.csv' เมื่อฉันลบรายการที่ซ้ำกันแล้วก็ไม่มีปัญหา
The Red Pea

2
วิธีนี้จะแก้ไขปัญหาเมื่อทำงานในเครื่อง แต่ให้ความสนใจเมื่อกดถ่ายทอดสด หาก mimeMap ได้รับการกำหนดค่าทั่วโลกใน IIS แล้วคุณจะได้รับข้อผิดพลาด 500 รายการ เพียงแค่ลบชิ้นส่วนนี้ออกจาก web.config ของคุณในกรณีนั้น
Evan

20

วิธีแก้คือคุณต้องเพิ่มนามสกุลไฟล์ json ในประเภท MIME

วิธีที่ 1

ไปที่ IIS เลือกแอปพลิเคชันของคุณและค้นหาประเภท MIME

ใส่คำอธิบายภาพที่นี่

คลิกที่เพิ่มจากแผงด้านขวา

นามสกุลไฟล์ = .json

ประเภท MIME = application / json

ใส่คำอธิบายภาพที่นี่

หลังจากเพิ่มประเภทไฟล์. jsonในประเภท MIMEให้รีสตาร์ท IISและพยายามเข้าถึงไฟล์ json


วิธีที่ 2

ไปที่ web.config ของแอปพลิเคชันนั้นแล้วเพิ่มบรรทัดนี้เข้าไป

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

15

เมื่อเพิ่มการสนับสนุนสำหรับ mimetype (ตามที่แนะนำโดย @ProVega) แนวทางปฏิบัติที่ดีที่สุดคือการลบประเภทออกก่อนที่จะเพิ่ม - เพื่อป้องกันข้อผิดพลาดที่ไม่คาดคิดเมื่อปรับใช้กับเซิร์ฟเวอร์ที่มีการรองรับประเภทอยู่แล้วเช่น:

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

เมื่อคุณเพิ่มเฉพาะ mimeMap บางครั้งมันก็ลบสไตล์ css ของคุณดังนั้นวิธีที่ถูกต้องคือลบออกก่อนขอบคุณมาก
sgrysoft

พา ธ ไปยังไฟล์ config ในไฟล์ IIS7 C:\Windows\System32\inetsrv\config: applicationHost.config
OO

5

เพิ่งมีปัญหานี้ แต่ต้องหา config สำหรับ IIS Express ดังนั้นฉันจึงสามารถเพิ่มประเภท mime ได้ สำหรับฉันมันอยู่ที่C:\Users\<username>\Documents\IISExpress\config\applicationhost.configและฉันสามารถเพิ่ม "แผนที่ละครใบ้" ที่ถูกต้องได้ที่นั่น


นี่อาจเป็นสาเหตุว่าทำไมจึงใช้งาน IIS Express ไม่ได้สำหรับฉัน น่าเสียดายที่นี่ไม่ใช่สิ่งที่ฉันต้องการกำหนดค่าในทุกเครื่อง dev ดังนั้นฉันจะแนะนำให้ใช้นามสกุล. js สำหรับไฟล์ config json
jpierson

คุณสามารถทำได้ใน Web.Config - ดูคำตอบนี้stackoverflow.com/a/19517275/643761
Simcha Khabinsky

@SimchaKhabinsky สำหรับฉันแล้ว web.config ไม่เพียงพอ
Jean-Bernard Pellerin

3
หาก web.config ไม่เพียงพอ, คุณอาจจำเป็นต้องเพิ่มบรรทัดนี้ก่อนที่จะมีโหนด:<mimeMap> <remove fileExtension=".json" />คุณไม่ควรแตะ applicationhost.config (หรือ machine.config) ดังที่กล่าวไว้การแก้ไขไฟล์เหล่านั้นอาจมีประโยชน์หากคุณสร้างไซต์ใหม่บ่อยๆและไม่ต้องการแก้ไข web.config สำหรับแต่ละไซต์ ซึ่งอาจใช้ได้กับสภาพแวดล้อม dev แต่บ่อยครั้งที่คุณไม่สามารถสัมผัส machine.config ในสภาพแวดล้อมการผลิตได้ดังนั้นฉันยังคงแนะนำให้ทำการเปลี่ยนแปลงใน web.config
gilly3

1
ขอบคุณ @ gilly3 - removeกุญแจสำคัญสำหรับฉัน
harriyott

0
  1. ไปที่ C: \ Users \ username \ Documents \ IISExpress \ config
  2. เปิด applicationhost.config ด้วย Visual Studio หรือโปรแกรมแก้ไขข้อความที่คุณชื่นชอบ
  3. ค้นหาคำว่า mimeMap คุณควรจะพบ 'em มากมาย
  4. เพิ่มบรรทัดต่อไปนี้ที่ด้านบนสุดของรายการ:
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.