ASP.NET MVC и IIS 5

Как лучше всего получить хостинг приложения ASP.NET MVC для работы на IIS 5 (6 или 7). Когда я попытался опубликовать свое приложение ASP.NET MVC, все, что я получил, это 404 ошибки. Я немного погуглил и нашел пару решений, но ни одно из них не кажется супер элегантным, и я беспокоюсь, не станут ли они непригодными для использования, когда я перейду к использованию среды общего хостинга для приложения.

Решение 1

  1. Right-click your application virtual directory on inetmgr.exe.
  2. Properties->Virtual Directory Tab-> Configuration.
  3. Add a new mapping extension. The extension should be .*, which will be mapped to the Executable C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll, or the appropriate location on your computer (you can simply copy this from the mapping for .aspx files). On the mapping uncheck "check that file exists".
  4. 3 X OK and you're good to go.
  5. If you want, you can apply this setting to all your web sites. In step1, click on the "Default Web Site" node instead of your own virtual directory, and in step 2 go to the "Home Directory" tab. The rest is the same.

Маршрутизация всего через ASP.NET кажется хакерским занятием.

Решения 2

Измените маршрутизацию MVC, чтобы она содержала .mvc в URL-адресе, а затем выполните шаги решения 1, основанные на этом расширении. Обновлено: исходная ссылка на изображение была потеряна, но вот она из кеша Google:

ASP.NET MVC и IIS 5

Решения 2 не компилируются, System.Web.Routing.Route не содержит конструктора, который принимает аргументы «0».

Maslow 01.12.2009 17:01
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
25
1
21 006
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Вы пробовали добавить .aspx в конец имени контроллера?

Это сработало для вопроса о переполнении стека Где я могу получить хостинг ASP.NET MVC?.

Итак, это в основном решения 2, спасибо, что указали на другой вопрос.

Dan 12.09.2008 01:42

Очень похоже, но если вы используете общий хостинг, вы не сможете добавить расширение сопоставления. Добавив aspx, вы станете золотым для любого сайта с версией 3.5.

Iain Holder 13.09.2008 12:04
Ответ принят как подходящий

Ответ: здесь

If *.mvc extension is not registered to the hosting , it will give 404 exception. The working way of hosting MVC apps in that case is to modify global.asax routing caluse in the following way.

routes.Add(new Route("{controller}.mvc.aspx/{action}", new MvcRouteHandler()) { Defaults = new RouteValueDictionary (new{ controller = "YourController"} ) });

In this way all your controller request will end up in *.mvc.aspx, which is recognized by your hosting. And as the MVC dlls are copied into your local bin , no special setttings need to be done for it.

Это происходит до или после routes.MapRoute("Default","{controller}/{action}/{id}",new { controller = "Home", action = "Index", id = "" }); //?

Maslow 01.12.2009 16:48

Что насчет движка Razor View. Работает ли это и с бритвенными видами.

Rajesh 01.03.2012 23:55

Это также работает в IIS6 и IIS7? или есть конкретное решение для IIS5-MVC?

juanreyesv 03.01.2013 07:49

Думаю, в любом случае вам придется выполнить Решение 1.

Рассмотрим конвейер HTTP-запросов.

  1. В IIS приходит запрос.
  2. IIS проверяет заголовок порта / хоста, чтобы узнать, настроен ли веб-сайт для захвата запросов для этого заголовка / порта хоста.
  3. IIS исследует расширение файла запроса (.php, .asp, .aspx) и передает его ISAPI, который может обрабатывать этот тип запроса.

Только в этот момент вступает в действие ASP.NET (или среда выполнения PHP). Если IIS не имеет этого сопоставления, он никогда не передаст запрос среде выполнения ASP.NET, и запрос никогда не достигнет вашего кода. Вот почему вам нужно сопоставление glob (*) с ASP.NET ISAPI.

URL-адреса фреймворка ASP.NET MVC часто заканчиваются вообще без расширения файла. Если вы хотите, чтобы эти запросы обрабатывались ASP.NET (или какой-либо другой средой выполнения), вам необходимо сопоставить все запросы независимо от расширения файла с этим ISAPI (например, aspnet_isapi.dll).

Это часто также делается для HttpHandler, которым необходимо обслуживать такие носители, как .jpg, .gif. Чтобы обработчик был задействован, он должен быть сопоставлен с вашим кодом, даже если .jpg не является «нормальным» расширением файла ASP.NET.

HTH,
Тайлер

К вашему сведению: на сервере 2003 (разработка приложения, которое должно было подключаться к RPS), это не позволило мне добавить расширение. *, Я использовал альтернативное решение, изменяя предложение маршрута, и это работал.

Используйте Metabase Explorer, вы можете добавить расширение. * В IIS6. Установите набор инструментов IIS 6.0 отсюда microsoft.com/download/en/…. После установки откройте и перейдите в дереве на левой панели к LM> W3SVC> 1> ROOT> AppName. Затем отредактируйте расширение на. *

Sunil 11.03.2012 11:56

Пробег: C: \ WINDOWS \ Microsoft.NET \ Framework \ v4.0.30319 \ aspnet_isapi.dll -i

Это сбросит настройки реестра IIS для пользователя aspnet.

Создайте виртуальный каталог: 1. Щелкните правой кнопкой мыши каталог, который хотите преобразовать.

  • выберите Свойства
    1. в разделе "Каталог" выберите "Создать".
    2. в разделе «Конфигурация» выберите «Добавить».
    3. для исполняемой вставки:

C: \ WINDOWS \ Microsoft.NET \ Framework \ v4.0.30319 \ aspnet_isapi.dll

для вставки расширения:. *

  • снимите флажок "Проверить, существует ли файл"

  • в разделе Документы добавьте файл точки входа, например: Default.htm, index.htm, Global.asax

  • в настройках каталога

    1. выберите Edit ...
    2. выберите Анонимный доступ
    3. снимите флажок Разрешить IIS управлять паролем
    4. снимите флажок Обычная проверка подлинности
    5. снимите флажок Встроенная проверка подлинности Windows
    6. в ASP.NET убедитесь, что версия = v4.0.30319

ЗАПОМНИТЕ имя пользователя, например: IUSR_AVSJ82S

Установите разрешение на совместное использование физического каталога:

  • В проводнике Windows перейдите в физический каталог, который был преобразован в виртуальный каталог. Щелкните правой кнопкой мыши имя каталога
  • выберите свойства
  • на вкладке безопасности выберите Добавить
  • введите имя пользователя IIS, например: IUSR_AVSJ82S нажмите кнопку проверки имени.
  • нажмите ОК
  • установить разрешения на чтение и запись.

первый шаг должен быть C: \ WINDOWS \ Microsoft.NET \ Framework \ v4.0.30319 \ aspnet_regiis -i

Matus 26.03.2013 17:27

Другие вопросы по теме