Cách cho phép tải xuống tệp .json với ASP.NET


125

Làm cách nào tôi có thể cho phép tải xuống các tệp * .json từ một trang web ASP.NET cũ (IIS6 tôi được tin tưởng)?

Tôi đang nhận được một trang 404 thay vì tệp JSON.

Tôi có cần tạo tệp web.config không? Những gì đi trong nó?


1
Bạn có thể cần thêm một loại MIME cho nó.
vcsjones

1
Để sử dụng trong javascript hoặc để lưu trên một hd?
Rémy

Tôi muốn truy cập nó qua jQuery.ajax (url: ...
Lea Hayes

2
Thêm vào đó, sau khi IIS cục bộ có một danh sách, trong lần triển khai tiếp theo của bạn, nó có thể đưa ra một lỗi 500 máy chủ từ một danh sách trùng lặp để sau đó nhận xét nó.
Tom Mallard

Câu trả lời:


118

Thêm loại MIME JSON vào IIS 6. Thực hiện theo các hướng dẫn tại Cấu hình các loại MIME của MSDN (IIS 6.0) .

  • Gia hạn: .json
  • Loại MIME: ứng dụng / json

Đừng quên khởi động lại IIS sau khi thay đổi.

CẬP NHẬT: Có nhiều cách dễ dàng để làm điều này trên IIS7 và mới hơn. Các op đặc biệt yêu cầu trợ giúp IIS6 vì vậy tôi sẽ để lại câu trả lời này. Nhưng câu trả lời này vẫn nhận được rất nhiều lưu lượng mặc dù IIS6 đã rất cũ. Hy vọng rằng bạn đang sử dụng một cái gì đó mới hơn, vì vậy tôi muốn đề cập rằng nếu bạn có phiên bản IIS7 mới hơn hoặc mới hơn, hãy xem câu trả lời của @ ProVega bên dưới để biết giải pháp đơn giản hơn cho các phiên bản mới hơn đó.


1
Chúc mừng nhưng đây là trên một gói lưu trữ được chia sẻ mà không có quyền truy cập vào bất cứ thứ gì ngoài web.config hoặc tệp mã toàn cầu
Lea Hayes

Nếu bạn không có quyền truy cập vào cài đặt IIS 6.0 và bộ phận hỗ trợ của nhà cung cấp sẽ không thêm loại MIME cho bạn, thì bạn sẽ phải chuyển nhà cung cấp hoặc đến các máy chủ mới hơn có IIS 7.0 trên nhà cung cấp đó nếu họ cung cấp hỗ trợ này
Jon Adams

1
Có, ASP.Net có thể chuyển tệp qua trình xử lý ASPX hoặc thậm chí một trang đơn giản, nhưng bạn sẽ không thể sử dụng loại tệp .json trong URL vì nó sẽ không chuyển yêu cầu đó đến ASP.Net thời gian chạy. Nó sẽ phải là một cái gì đó đi qua thời gian chạy ASPX. Nếu bạn không có quyền truy cập vào cài đặt IIS, nó sẽ phải là một trong những tiện ích mở rộng hiện có như thế nào .ASPX. Một lần nữa, chuyển sang một máy chủ với IIS7 cung cấp nhiều giải pháp dễ dàng hơn.
Jon Adams

1
Khởi động lại nhóm ứng dụng là đủ (trong trường hợp của tôi), thay vì khởi động lại IIS hoàn toàn.
kltft

1
@kltft Đúng, khởi động lại apppool sẽ kích hoạt cập nhật, nhưng tất nhiên chỉ cho nhóm đó. Các bước này bao gồm thay đổi cài đặt cho mọi người và để chúng ở mức cài đặt không nhất quán sẽ dễ dẫn đến nhầm lẫn sau này. Tôi khuyên bạn nên khởi động lại toàn bộ quá trình iis cho an toàn và vệ sinh. Nhưng trong một tình huống khó khăn, nếu mọi người đồng ý với những ưu / nhược điểm, khởi động lại apppool có thể hoạt động.
Jon Adams

211

Nếu bạn muốn thêm hỗ trợ thủ công vào trang web của mình, bạn chỉ cần thêm phần sau vào web.config trong phần system.webServer :

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

Điều này sẽ thêm một cấu hình "cục bộ" trong IIS. Điều này không hoạt động trong IIS6, nhưng hoạt động trong IIS7 và mới hơn.


6
Cập nhật câu trả lời của bạn để bao gồm web.configđường dẫn đầy đủ .
GFoley83


1
Vì một số lý do, điều này làm rối tung toàn bộ trang web của tôi - css không còn hoạt động!
TheJeff

@TheJeff - điều đó đã xảy ra với tôi, nhưng đó là vì tôi đã thêm hai mimeMap tĩnh, một cho JSON (cần thiết) và một cho CSV (dự phòng, tôi cho rằng điều đó là cần thiết, nhưng ứng dụng IISExpressConfig đã có CSV). Do đó, tôi đã gặp lỗi này bất cứ khi nào tôi cố gắng truy cập bất kỳ tệp tĩnh nào: Cannot add duplicate collection entry of type 'mimeMap' with unique key attribute 'fileExtension' set to '.csv' Một khi tôi đã xóa bản sao, không có vấn đề gì.
Hạt đậu đỏ

1
Điều này sẽ khắc phục sự cố khi chạy cục bộ, nhưng chú ý khi đẩy trực tiếp. Nếu mimeMap đã được cấu hình trên toàn cầu trong IIS, bạn sẽ nhận được 500 lỗi. Chỉ cần xóa phần này khỏi web.config trong trường hợp đó.
Evan

20

Giải pháp là bạn cần thêm loại tiện ích mở rộng tệp json trong Loại MIME

Phương pháp 1

Truy cập IIS, Chọn ứng dụng của bạn và Tìm loại MIME

nhập mô tả hình ảnh ở đây

Nhấp vào Thêm từ bảng bên phải

Tên tệp mở rộng = .json

Loại MIME = ứng dụng / json

nhập mô tả hình ảnh ở đây

Sau khi thêm loại tệp .json trong Loại MIME , Khởi động lại IIS và thử truy cập tệp json


Cách 2

Truy cập web.config của ứng dụng đó và thêm dòng này trong đó

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

15

Khi thêm hỗ trợ cho mimetype (như được đề xuất bởi @ProVega) thì cách tốt nhất là loại bỏ loại trước khi thêm nó - ví dụ, điều này là để ngăn các lỗi không mong muốn khi triển khai đến các máy chủ có hỗ trợ cho loại đã tồn tại, ví dụ:

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

Khi bạn chỉ thêm mimeMap, đôi khi nó sẽ xóa kiểu css của bạn, vì vậy, cách chính xác là xóa nó trước, cảm ơn rất nhiều
sgrysoft

Đường dẫn đến tệp cấu hình trong C:\Windows\System32\inetsrv\configtệp IIS7 : applicationhost.config
OO

5

Chỉ có vấn đề này nhưng phải tìm cấu hình cho IIS Express để tôi có thể thêm các loại mime. Đối với tôi, nó được đặt tại C:\Users\<username>\Documents\IISExpress\config\applicationhost.configvà tôi đã có thể thêm vào "bản đồ mime" chính xác ở đó.


Đây có thể là lý do tại sao nó không hoạt động với tôi thông qua IIS Express. Thật không may, đây không phải là thứ tôi muốn cấu hình trên mọi máy dev nên có vẻ như tôi khuyên bạn nên gắn bó với phần mở rộng .js cho các tệp cấu hình json.
jpierson

Bạn cũng có thể làm điều đó trong Web.Config - Hãy xem câu trả lời này stackoverflow.com/a/19517275/643761
Simcha Khabinsky

@SimchaKhabinsky Đối với tôi web.config là không đủ.
Jean-Bernard Pellerin

3
Nếu web.config không đủ, bạn có thể cần thêm dòng này trước <mimeMap>nút : <remove fileExtension=".json" />. Bạn không cần phải chạm vào applicationationhost.config (hoặc machine.config). Điều đó đang được nói, sửa đổi các tệp đó có thể hữu ích nếu bạn thường xuyên tạo các trang web mới và không muốn phải sửa đổi web.config cho mỗi trang web. Điều đó có thể hoạt động đối với môi trường dev, nhưng thường thì bạn không thể chạm vào máy.config trong môi trường sản xuất, vì vậy tôi vẫn khuyên bạn nên thực hiện thay đổi trong web.config.
gilly3

1
Cảm ơn @ gilly3 - removechìa khóa cho tôi
harriyott

0
  1. Điều hướng đến C: \ Users \ username \ Documents \ IISExpress \ config
  2. Mở applicationationhost.config bằng Visual Studio hoặc trình soạn thảo văn bản yêu thích của bạn.
  3. Tìm kiếm từ mimeMap, bạn sẽ tìm thấy rất nhiều chúng.
  4. Thêm dòng sau vào đầu danh sách :.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.