Книга: ASP.NET MVC Framework
Настройка маршрутизации
Настройка маршрутизации
Для правильного функционирования механизма маршрутизации в ASP.NET MVC необходима корректная обработка сервером IIS расширений mvc, пути с которыми используются внутри MVC Framework. Эта проблема, если она возникла, довольно просто решается в случаях, когда вы имеете дело с хостингом на базе IIS7 (сегодня это наиболее распространенный вариант). Для решения проблемы вам необходимо с помощью административной панели инструментов, которую предлагает ваша хостинговая компания, установить режим работы приложения в IIS7 Integrated Mode вместо установленного по умолчанию режима IIS7 Classic Mode. Варианты доступа к этой опции могут отличаться в зависимости от хостера.
Если же вы имеете доступ к серверу IIS, то изменение режима работы IIS7 для вашего приложения выполняется через инструмент Internet Information Services Manager. В IIS Manager вам достаточно задать верный пул приложений для своего приложения, который бы работал в режиме IIS7 Integrated Mode, по умолчанию это Default Application Pool или DefaultAppPool (рис. П1.1).
Проблема маршрутизации особенно актуальна для хостинга ASP.NET MVC-приложений на IIS6, в котором необходимо проделать дополнительные действия.
Если вы имеете доступ к IIS-серверу и можете его конфигурировать (в случаях, когда вы производите самостоятельный хостинг или хостинг на виртуальных серверах), вам необходимо самостоятельно зарегистрировать для IIS6 обработку расширения mvc. Это можно проделать двумя способами.
? Вы можете использовать скрипт register.wsf, который поставляется с ASP.NET MVC и расположен по адресу C:Program FilesMicrosoft ASP.NETASP.NET MVCScripts или C:Program Files (x86)Microsoft ASP.NETASP.NET MVCScripts для 64-битных операционных систем. Скрипт register.wsf автоматически зарегистрирует обработку расширения mvc для IIS6.
? Вместо использования скрипта вы можете проделать необходимые для регистрации действия собственноручно. Для этого необходимо пройти в свойства проекта, выбрать вкладку Virtual Directory и в ней нажать кнопку Configuration. В окне конфигурации приложения будет показан список привязок расширений к ISAPI-обработчикам. Добавьте новое расширение mvc и привяжите его к обработчику c:WINDOWSMicrosoft.NET Frameworkv2.0.50727aspnet_isapi.dll. Путь к обработчику ISAPI может отличаться, но вы можете определить верный, найдя сопоставленный путь для расширения aspx. После добавления обработчика вы увидите его в списке сопоставлений (рис. П1.2).
Рис. П1.2. Список сопоставлений расширений и ISAPI-обработчиков
? После сопоставления расширения mvc для вашего приложения необходимо видоизменить создание маршрутов в Global.asax так, как показано в листинге П1.1.
Листинг П1.1. Модифицированный код Global.asax
using System;
using System.Collections.Generic;
using System.Linq; using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace MvcApplicationl {
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default",
"{controller}.mvc/{action}/{id}",
new { action = "Index", id = "" }
);
routes.MapRoute(
"Root",
"",
new { controller = "Home", action = "Index", id = "" }
);
}
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
}
}
}
Обратите внимание на выделенные участки кода листинга П1.1. Вместо создаваемого по умолчанию маршрута с шаблоном {controller}/{action}/{id},
для IIS6 необходимо создать маршрут с шаблоном {controller}.mvc/{action}/{id}.
Плюс, для обработки запросов к корню приложения необходимо создать еще один маршрут с именем Root
и пустым шаблоном маршрута.
После таких изменений каждый запрос к вашему приложению должен иметь вид {controller}.mvc/{action}/{id},
т. е. каждая строка имени контроллера должна заканчиваться с расширением mvc. Например: запрос /product.mvc/details/1
вызовет контроллер-действие Details
в контроллере Product
и передаст в параметр id
значение 1.
В случае, когда вы не имеете доступа к конфигурированию сервера IIS и не можете задать сопоставление расширения и ISAPI-обработчика, то решением может стать использование вместо расширения mvc другого расширения, зарегистрированного в системе: axd, aspx, ashx. В таком случае описанный в листинге код должен быть модифицирован следующим образом:
routes.MapRoute(
"Default",
"{controller}.aspx/{action}/{id}",
new { action = "Index", id = "" }
Это означает, что все ваши запросы должны представлять собой подобие запроса /product.aspx/details/
1 с расширением aspx для имени контроллера.
Ограничение IIS6 приводит к тому, что маршрутизация и строки URL-запросов к вашему приложению не будут выглядеть так же красиво, как в приложениях, работающих на базе IIS7. Кроме того, вам будет необходимо генерировать совместимые ссылки с определенными маршрутами и используемыми в них расширениями (mvc или aspx). Однако в настоящее время использование серверов IIS6 в компаниях, которые предлагают услуги хостинга, стремится к нулю, и все крупные хостеры уже предлагают хостинг на базе IIS7 или даже IIS7.5. Поэтому, перед тем как сделать выбор хостера, уточните, предлагает ли он сервер на базе IIS7, и если обнаружится, что он по какой-то причине до сих пор этого не делает, то, возможно, вам следует поискать другого, более современного хостера.
- Настройка сетевых интерфейсов
- Настройка DNS
- Настройка ядра и сетевых интерфейсов
- Настройка PPTP-клиента
- Настройка учетных записей пользователей
- 6.5 Хост в таблице маршрутизации IP
- Глава 24 Расширенные средства маршрутизации
- Настройка доступа пользователей к рабочей книге
- Настройка верхней области навигации
- Настройка левой панели навигации
- Настройка оповещений
- 13.3. Настройка почтовых клиентов