Как разрешить загрузку файла .json с помощью ASP.NET


125

Как я могу включить загрузку файлов * .json со старого сайта ASP.NET (мне кажется, IIS6)?

Я получаю страницу 404 вместо файла JSON.

Мне нужно создать файл web.config? Что в нем входит?


1
Вероятно, вам потребуется добавить для него MIME-тип .
vcsjones

1
Для использования в javascript или для сохранения на hd?
Remy

Я хочу получить к нему доступ через jQuery.ajax (url: ...
Lea Hayes

2
Добавив, что после того, как у локального IIS есть список, при следующем развертывании он может выдать ошибку сервера 500 из дублирующего списка, поэтому закомментируйте его.
Tom Mallard

Ответы:


118

Добавьте тип MIME JSON в IIS 6. Следуйте инструкциям в разделе MSDN «Настройка типов MIME (IIS 6.0)» .

  • Расширение: .json
  • Тип MIME: приложение / json

Не забудьте перезапустить IIS после изменения.

ОБНОВЛЕНИЕ: есть простые способы сделать это на IIS7 и новее. Оператор специально запросил помощь IIS6, поэтому я оставляю этот ответ как есть. Но этот ответ по-прежнему получает много трафика, хотя IIS6 сейчас очень старый. Надеюсь, вы используете что-то более новое, поэтому я хотел бы упомянуть, что если у вас более новая версия IIS7 или более новая версия, см. Ответ @ ProVega ниже, чтобы найти более простое решение для этих новых версий.


1
Ура, но это пакет общего хостинга без доступа ни к чему, кроме web.config или глобальному файлу кода,
Леа Хейс

Если у вас нет доступа к настройкам IIS 6.0, и служба поддержки вашего провайдера не добавит вам тип MIME, вам придется сменить провайдера или на более новые серверы с IIS 7.0 у этого провайдера, если они его предлагают, чтобы поддержите это.
Джон Адамс

1
Да, ASP.Net может передавать файл через обработчик ASPX или даже простую страницу, но вы не сможете использовать тип файла .json в URL-адресе, поскольку он не будет передавать этот запрос в ASP.Net. во время выполнения. Это должно быть что-то, что проходит через среду выполнения ASPX. Если у вас нет доступа к настройкам IIS, это должно быть одно из существующих расширений, например .ASPX. Опять же, переход на сервер с IIS7 предлагает гораздо больше и более простых решений.
Джон Адамс

1
Перезапуска пула приложений должно быть достаточно (так было в моем случае), а не перезапуска IIS полностью.
kltft

1
@kltft Верно, перезапуск пула приложений вызовет обновление, но, конечно, только для этого пула. Эти шаги включают в себя изменение настроек для всех, и их несогласованность в настройках впоследствии легко может привести к путанице. Я рекомендую перезапустить весь процесс iis для безопасности и разумности. Но в крайнем случае, если все согласятся с плюсами и минусами, перезапуск пула приложений может сработать.
Джон Адамс,

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 - это случилось со мной, но это потому, что я добавил два mimeMap staticContent, один для JSON (необходимо) и один для CSV (избыточный, я предполагал, что это необходимо, но в applicationConfig IISExpress уже был CSV). Поэтому я получал эту ошибку каждый раз, когда пытался получить доступ к любому статическому файлу: как Cannot add duplicate collection entry of type 'mimeMap' with unique key attribute 'fileExtension' set to '.csv' только я удалил дубликат, никаких проблем.
The Red Pea

1
Это решит проблему при локальном запуске, но будьте внимательны при запуске в реальном времени. Если mimeMap уже настроен глобально в IIS, вы получите 500 ошибок. В этом случае просто удалите этот фрагмент из вашего web.config.
Эван

20

Решение: вам нужно добавить тип расширения файла json в типы MIME.

Способ 1

Перейдите в IIS, выберите свое приложение и найдите типы MIME.

введите описание изображения здесь

Нажмите "Добавить" на правой панели.

Расширение имени файла = .json.

Тип MIME = приложение / json

введите описание изображения здесь

После добавления .json типа файла в MIME типов , Restart 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

Путь к файлу конфигурации в файле IIS7 C:\Windows\System32\inetsrv\config: applicationHost.config
OO

5

Просто возникла эта проблема, но мне нужно было найти конфигурацию для IIS Express, чтобы я мог добавить типы mime. Для меня он был расположен по адресу, C:\Users\<username>\Documents\IISExpress\config\applicationhost.configи я смог добавить туда правильную «mime-карту».


Возможно, поэтому у меня не работает IIS Express. К сожалению, это не то, что я хотел бы настраивать на каждой машине разработчика, поэтому, похоже, я рекомендую использовать расширение .js для файлов конфигурации json.
jpierson 07

Вы также можете сделать это в Web.Config - посмотрите этот ответ stackoverflow.com/a/19517275/643761
Симха Хабинский

@SimchaKhabinsky Мне не хватило web.config.
Jean-Bernard Pellerin

3
Если web.config не достаточно, вы можете добавить эту строку перед <mimeMap>узлом: <remove fileExtension=".json" />. Вам не нужно трогать applicationhost.config (или machine.config). При этом изменение этих файлов может быть полезно, если вы часто создаете новые сайты и не хотите изменять web.config для каждого сайта. Это может работать для сред разработки, но часто вы не можете коснуться machine.config в производственных средах, поэтому я все же рекомендую внести изменения в web.config.
gilly3

1
Спасибо @ gilly3 - это removeбыл ключ для меня
harriyott

0
  1. Перейдите в C: \ Users \ username \ Documents \ IISExpress \ config.
  2. Откройте applicationhost.config с помощью Visual Studio или вашего любимого текстового редактора.
  3. Найдите слово mimeMap, вы найдете их много.
  4. Добавьте следующую строку в начало списка:.
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.