ASP.NET Дружественные URL - PullRequest
       27

ASP.NET Дружественные URL

3 голосов
/ 17 ноября 2009

В своем исследовании я нашел 2 способа сделать это.

Оба требовали модификации процедуры Application_BeginRequest в Global.Asax, где вы выполняли свой код для сопоставления фактического URL (у меня был просмотр базы данных, который содержал все понятные URL и их сопоставленные «реальные» URL). Теперь хитрость заключается в том, чтобы ваши запросы выполнялись через ядро ​​.NET без расширения aspx. 2 способа, которые я нашел:

  1. Запустите все через ядро ​​.NET с сопоставлением расширений приложений с подстановочными знаками.

  2. Создайте пользовательскую страницу ошибки aspx и скажите IIS отправить 404 на нее.

Теперь вот мой вопрос:

Есть ли причина, по которой один из них лучше делать, чем другой?

Во время игры на моем dev-сервере первое, что я заметил в # 1, было то, что он испортил расширения главной страницы, не так уж и много, но именно так я привык подключаться к своим сайтам. Еще одна проблема, с которой я столкнулся в # 1, заключается в том, что, несмотря на то, что моя хостинговая компания проявляет снисходительность по отношению ко мне (поскольку я являюсь их крупнейшим клиентом) и будет рассматривать такие действия, они опасаются любых угроз безопасности, которые могут возникнуть.

`# 2 прекрасно работает, но у меня просто такое чувство, что оно не так эффективно, как # 1. Я просто бреду?

Спасибо

Ответы [ 4 ]

3 голосов
/ 17 ноября 2009

Я тоже использовал # 2 в прошлом.

Это более эффективно, потому что в отличие от группового сопоставления, движку ASP.NET не нужно «обрабатывать» запросы для всех дополнительных ресурсов, таких как файлы изображений, статический HTML, CSS, Javascript и т. Д.

В качестве альтернативы, если вы не возражаете против расширения .aspx в своих URL, вы можете использовать: <a href="http://myweb/app/idx.aspx/products/1" rel="nofollow noreferrer">http://myweb/app/idx.aspx/products/1</a> - это прекрасно работает.

Сказав это, реальным решением является использование IIS 7, где среда выполнения ASP.NET является полноценной частью стека модуля IIS HTTP.

2 голосов
/ 17 ноября 2009

Если у вас последняя версия IIS, для нее есть модуль перезаписи - см. здесь . Если не существует бесплатных сторонних двоичных файлов, которые можно использовать с более старыми IIS (то есть версией 6) - я использовал тот, который читает правила перезаписи из файла .ini и поддерживает регулярное выражение, но я не могу вспомнить его имя извините (возможно это ). Я бы рекомендовал это по более дешевой цене со страницей 404.

1 голос
/ 17 ноября 2009

Вы должны отобразить все запросы через механизм ASP.NET. IIS обрабатывает запросы по расширению файла. По умолчанию он обрабатывает только расширения .aspx, .ashx и т. Д., Которые должны обрабатываться только ASP.NET. Причина в том, что это добавляет накладные расходы на обработку запроса. Я написал, как это сделать с IIS 6 некоторое время назад, http://professionalaspnet.com/archive/2007/07/27/Configure-IIS-for-Wildcard-Extensions-in-ASP.NET.aspx.

Вы правильно делаете свое отображение из базы данных. RegEx переписывает, вроде используется из коробки в MVC. Это связано с тем, что оно более или менее вынуждает вас ввести первичный ключ в URL-адрес и не дает хорошего способа сопоставления символов, которые не допускаются в URL-адресах, например '.

1 голос
/ 17 ноября 2009

Вы проверяли ASP .Net MVC Framework ? Используя эту структуру, все ваши URL-адреса автоматически сопоставляются с контроллерами, которые могут выполнять любые желаемые действия (включая перенаправление на другие URL-адреса или контроллеры). Вы также можете установить собственные маршруты с пользовательскими параметрами. Если вы еще этого не видели, возможно, стоит посмотреть.

...