Перезапись URL IIS против маршрутизации URL - PullRequest
48 голосов
/ 18 сентября 2008

Я планировал использовать URL-маршрутизацию для приложения веб-форм. Но после прочтения некоторых сообщений я не уверен, что это простой подход.

Лучше ли использовать модуль перезаписи URL для веб-форм? Но это только для IIS7. Первоначально, было некоторое жужжание, что URL-маршрутизация полностью отделена от Asp.Net MVC и может использоваться для веб-форм.

Хотелось бы услышать любые предложения ..

Ответы [ 7 ]

39 голосов
/ 08 ноября 2008

Это лучшая статья, которую я нашел по этой теме: Перезапись URL IIS и маршрутизация ASP.NET . Автор: Руслан Якушев.

перезапись URL IIS

Когда клиент отправляет запрос на веб-сервер для определенного URL-адреса, компонент перезаписи URL анализирует запрошенный URL-адрес и заменяет его другим другим URL-адресом на том же сервере. Компонент перезаписи URL выполняется очень рано в конвейере обработки запросов, поэтому он может изменить запрошенный URL-адрес, прежде чем веб-сервер примет решение о том, какой обработчик использовать для обработки запроса.

IIS URL Rewriting

ASP.NET Routing

Маршрутизация ASP.NET реализована в виде модуля управляемого кода, который подключается к конвейеру обработки запросов IIS на этапе Resolve Cache (событие PostResolveRequestCache) и на этапе обработчика карты (PostMapRequestHandler). Маршрутизация ASP.NET настроена на выполнение всех запросов, направленных к веб-приложению.

IIS URL Routing

Различия между перезаписью URL и маршрутизацией ASP.NET:

  1. Перезапись URL используется для управления путями URL до того, как запрос обрабатывается веб-сервером . Модуль перезаписи URL ничего не знает о том, какой обработчик в итоге обработает перезаписанный URL. Кроме того, фактический обработчик запроса может не знать, что URL был переписан.
  2. Маршрутизация ASP.NET используется для отправки запроса обработчику на основе запрошенного пути URL . В отличие от перезаписи URL, компонент маршрутизации знает об обработчиках и выбирает обработчик, который должен сгенерировать ответ для запрошенного URL. Вы можете думать о маршрутизации ASP.NET как о сложном механизме отображения обработчиков.

В дополнение к этим концептуальным различиям существуют некоторые функциональные различия между перезаписью URL IIS и маршрутизацией ASP.NET:

  1. Модуль перезаписи URL-адреса IIS можно использовать с веб-приложениями любого типа, включая ASP.NET, PHP, ASP и статические файлы. Маршрутизация ASP.NET может использоваться только с веб-приложениями на основе .NET Framework.
  2. Модуль перезаписи URL IIS работает одинаково независимо от того, используется ли для пула приложений интегрированный или классический режим конвейера IIS. Для маршрутизации ASP.NET предпочтительно использовать режим интегрированного конвейера. Маршрутизация ASP.NET может работать в классическом режиме, но в этом случае URL-адреса приложений должны включать расширения файлов, либо приложение должно быть настроено на использование сопоставления обработчика «*» в IIS.
  3. Модуль перезаписи URL может принимать решения о перезаписи на основе доменных имен, заголовков HTTP и серверных переменных. По умолчанию маршрутизация ASP.NET работает только с URL-путями и с заголовком HTTP-метода.
  4. Помимо перезаписи, модуль перезаписи URL-адреса может выполнять перенаправление HTTP, выдавать пользовательские коды состояния и отменять запросы. Маршрутизация ASP.NET не выполняет эти задачи.
  5. Модуль перезаписи URL не является расширяемым в его текущей версии. ASP.NET маршрутизация является полностью расширяемой и настраиваемой.
25 голосов
/ 18 сентября 2008

Здесь есть отличный пост о различиях между ними от члена команды IIS.

Единственное предостережение, которое я бы посоветовал, заключается в том, что для WebForms вы должны быть осторожны при использовании Routing. Я написал пример реализации того, как вы будете использовать маршрутизацию с WebForms , которая решает эти проблемы и, надеюсь, поможет ответить на ваш вопрос.

7 голосов
/ 18 сентября 2008

Хотите ли вы, чтобы отформатированные URL были фабрикой для порождения страниц?

или вы хотите, чтобы .aspx ушел?

переписывание, для того, чтобы заставить .aspx исчезнуть, или просто привести в порядок URL.

Маршрутизация, предназначенная для просмотра запроса и определения того, какой объект должен его обработать. Они звучат похоже, у Фила Хаака есть несколько хороших статей на эту тему.

в iis6, isapiRewrite, очень хорошо

4 голосов
/ 18 сентября 2008

Я недавно написал свою собственную систему переписывания, чтобы URL на моих сайтах выглядели лучше. По сути, вам нужно написать собственный IHttpModule и добавить его в ваш web.config для перехвата входящих запросов. Затем вы можете использовать HttpContext.Current.RewritePath, чтобы изменить то, на что вы указываете.

Вы также захотите настроить свой сайт на , используя aspnet_isapi для всего .

На этом пути вы обнаружите множество небольших проблем, таких как попытка работать со страницами, которые используют «хвосты» на них (например, для PageMethods), или поиск путей к элементам страницы и постбэкам форм, но вы справитесь с ними. .

Если интересно, я могу опубликовать ссылку на код, и вы можете проверить это. Я уже разобрался со многими проблемами, чтобы вы могли прочитать их по ходу дела. Я уверен, что есть много других людей, которые также сделали это, что может быть хорошим ресурсом.

2 голосов
/ 18 сентября 2008

Вы можете проверить мой ответ на этот вопрос: ASP.NET - Создание собственной системы маршрутизации . Я включил несколько хороших ссылок, чтобы помочь построить свою собственную систему маршрутизации, используя либо метод перезаписи URL, либо новый механизм маршрутизации, который вы можете использовать, который появился в проекте ASP.NET MVC.

0 голосов
/ 09 марта 2009

Для перезаписи URL на IIS IIRF работает в IIS5, 6, 7. Бесплатно. Легко. Быстро. Открытый исходный код. Поддержка регулярных выражений.

0 голосов
/ 18 сентября 2008

Проект «Динамические данные», доступный с .Net 3.5 SP1, показывает хороший пример реализации маршрутизации URL.

...