Перезапись URL IIS против маршрутизации URL
Я планировал использовать URL-маршрутизацию для приложения Web Forms. Но, прочитав некоторые посты, я не уверен, что это легкий подход.
Что лучше использовать модуль перезаписи URL для веб-форм? Но это только для IIS7. Первоначально, было некоторое жужжание о том, что URL-маршрутизация полностью отделена от Asp.Net MVC и может использоваться для веб-форм.
Хотелось бы услышать любые предложения..
7 ответов
Здесь есть отличный пост о различиях между ними от члена команды IIS.
Один совет, который я бы посоветовал, заключается в том, что для WebForms вы должны быть осторожны при использовании маршрутизации. Я написал пример реализации того, как вы будете использовать маршрутизацию с WebForms, который решает эти проблемы и, надеюсь, поможет ответить на ваш вопрос.
Это лучшая статья, которую я нашел на эту тему: перезапись URL IIS и маршрутизация ASP.NET Руслана Якушева.
Перезапись URL IIS
Когда клиент делает запрос к веб-серверу для определенного URL, компонент перезаписи URL анализирует запрошенный URL и изменяет его на другой другой URL на том же сервере. Компонент перезаписи URL выполняется очень рано в конвейере обработки запросов, поэтому он может изменить запрошенный URL-адрес до того, как веб-сервер примет решение о том, какой обработчик использовать для обработки запроса.
ASP.NET Routing
Маршрутизация ASP.NET реализована в виде модуля управляемого кода, который подключается к конвейеру обработки запросов IIS на этапе Resolve Cache (событие PostResolveRequestCache) и на этапе обработчика карты (PostMapRequestHandler). Маршрутизация ASP.NET настроена на выполнение всех запросов, направленных к веб-приложению.
Различия между перезаписью URL и маршрутизацией ASP.NET:
- Перезапись URL используется для манипулирования путями URL до обработки запроса веб-сервером. Модуль перезаписи URL ничего не знает о том, какой обработчик в конечном итоге обработает перезаписанный URL. Кроме того, фактический обработчик запроса может не знать, что URL был переписан.
- Маршрутизация ASP.NET используется для отправки запроса обработчику на основе запрошенного пути URL-адреса. В отличие от перезаписи URL, компонент маршрутизации знает об обработчиках и выбирает обработчик, который должен сгенерировать ответ для запрошенного URL. Вы можете думать о маршрутизации ASP.NET как о сложном механизме отображения обработчиков.
В дополнение к этим концептуальным различиям существуют некоторые функциональные различия между перезаписью URL IIS и маршрутизацией ASP.NET:
- Модуль перезаписи URL IIS можно использовать с любым типом веб-приложений, включая ASP.NET, PHP, ASP и статические файлы. Маршрутизация ASP.NET может использоваться только с веб-приложениями на основе.NET Framework.
- Модуль перезаписи URL IIS работает одинаково независимо от того, используется ли для пула приложений интегрированный или классический режим конвейера IIS. Для маршрутизации ASP.NET предпочтительно использовать режим интегрированного конвейера. Маршрутизация ASP.NET может работать в классическом режиме, но в этом случае URL-адреса приложений должны включать расширения файлов, либо приложение должно быть настроено на использование сопоставления обработчика "*" в IIS.
- Модуль перезаписи URL может принимать решения о перезаписи на основе доменных имен, заголовков HTTP и серверных переменных. По умолчанию маршрутизация ASP.NET работает только с URL-путями и с заголовком HTTP-метода.
- В дополнение к перезаписи модуль перезаписи URL-адреса может выполнять перенаправление HTTP, выдавать пользовательские коды состояния и отменять запросы. ASP.NET маршрутизация не выполняет эти задачи.
- Модуль перезаписи URL не является расширяемым в своей текущей версии. ASP.NET маршрутизация является полностью расширяемой и настраиваемой.
Вы хотите, чтобы отформатированные URL-адреса были фабрикой для нерестящихся страниц?
или вы хотите, чтобы.aspx ушел?
переписывание, для того, чтобы заставить.aspx уйти, или просто привести в порядок URL.
Маршрутизация предназначена для просмотра запроса и определения того, какой объект должен его обработать. Они звучат похоже, у Фила Хаака есть несколько хороших статей на эту тему.
в iis6 isapiRewrite очень хорошо
Недавно я только что написал свою собственную систему переписывания, чтобы URL на моих сайтах выглядели лучше. По сути, вам нужно написать собственный IHttpModule и добавить его в ваш web.config для перехвата входящих запросов. Затем вы можете использовать HttpContext.Current.RewritePath, чтобы изменить то, на что вы указываете.
Вы также захотите настроить свой сайт на использование aspnet_isapi для всего.
На этом пути вы обнаружите множество небольших проблем, таких как попытка работать со страницами, которые используют "хвосты" на них (например, для PageMethods), или поиск путей к элементам страницы и обратным передачам форм, но вы справитесь с ними.
Если интересно, я могу опубликовать ссылку на код, и вы можете проверить это. Я уже разобрался со многими проблемами, чтобы вы могли прочитать их по ходу дела. Я уверен, что есть много других людей, которые также сделали это, что может быть хорошим ресурсом.
Вы можете проверить мой ответ на этот вопрос: ASP.NET - Создание собственной системы маршрутизации. Я включил несколько хороших ссылок, чтобы помочь построить свою собственную систему маршрутизации, используя либо метод перезаписи URL, либо новый механизм маршрутизации, который вы можете использовать, который появился в проекте ASP.NET MVC.
Проект "Динамические данные", доступный с.Net 3.5 SP1, показывает хороший пример реализации маршрутизации URL.
Для перезаписи URL в IIS IIRF работает в IIS5, 6, 7. Бесплатно. Легко. Быстро. Открытый исходный код. Поддержка регулярных выражений.