Как разрешить загрузку файла .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 и новее.

ProVega
источник
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-карту».

Longda
источник
Возможно, поэтому у меня не работает 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. Добавьте следующую строку в начало списка:.
пратик годха
источник