Картинка блога

Жаль начинать знакомство с библиотеками с их проблем. Но все-же. Сегодня я расскажу о том, какие проблемы могут возникнуть, при развертывании ASP.NET MVC приложений на IIS 6 и ранних версиях. Все дело в том, что запуская и тестируя ваше приложение из студии, вы можете и не догадыватся о том, что ваше приложение не запустится на сервере. Собственно это и произошло со мной.

Все дело в маршрутизации.

По умолчанию, во всех примерах MVC вы найдете:

public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default",                                               Route name
"{controller}/{action}/{id}",  URL with parameters
new { controller = "Customer", action = "Index", id = "" }  // Parameter defaults
);
routes.MapRoute(
"DefaultTwoParameter",
"{controller}/{action}/{id}/{step}"
);
}

Что говорит классу маршрутизации об отсутствии расширений в ваших «файлах», которые запрашивает клиент. Все бы хорошо, но IIS определяет что и как надо запускать, кому и с чем нодо передовать управление именно по расширению. Так что после создания виртуальной директории будет прислан однозначный ответ 404.

Исправить это можно следушим способом:

public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default",                                               Route name
"{controller}.mvc/{action}/{id}",  URL with parameters
new { controller = "Customer", action = "Index", id = "" }  // Parameter defaults
);
routes.MapRoute(
"DefaultTwoParameter",
"{controller}.mvc/{action}/{id}/{step}"
);
}

После чего в конфигурации виртуальной директории добавить это расширение (.mvc) с тем-же обработчиком, что и у .aspx: aspnet_isapi.dll.
Настало время вспомнить, если ли места где исползуются жестко закодированные ссылки. Если таковые есть, то перечитайте заново про хелперы, которые используются в MVC.

Метки:, , , ,

5 комментариев в “IIS 6 и ASP.NET MVC.”

  1. Другое решение :

    1. Запустите Internet IIS Manager
    2. Выберите ваш сайт в дереве
    3. Правой кнопкой мыши счелкнете на вашем сайте в дереве и выберите Properties.
    4. Выбирите вкаладку Home Directory
    5. Возле настроек апликейшона будет кнопка Configuration нажмите ее
    6. Дальше в Wildcard-ах жмем Insert
    6. В диалоговом окне прописываем следующее — %windir%\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll, где %windir% путь к вашей винде.
    7. Снимаем галку Verify ….
    8. Жмем ОК и наслаждаемся.

    Если у вас русская винда, догадаетесь как делать переведя названия 🙂

  2. Забавно, но в другом решении пункт 8 тупо задизейблен :). Шо делать — не понятно.

  3. написать расширение .mvc

  4. Кнопка OK неактивна. Почему?

  5. глюк майкософта.
    Поиграйтесь с галочкой Verify и фокусами текстовых полей