Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Использование Application_BeginRequest для перезаписи URL

Автор вопроса: Lea CohenОтветов: 5

До сих пор мы переписывали URL-адреса, используя страницу custon 404: URL-адрес не сопоставлялся ни с одним файлом на сайте, и мы настроили IIS для отправки ошибки 404 на страницу aspx, которая перенаправляла эти URL-адреса на правильный URL-адрес. Теперь мы хотим прекратить использовать перенаправления, поэтому после прочтения статьи Скотта Гатри о переопределении URL-адресов я хочу использовать Application_BeginRequest в Global.asax. Дело в том, что многие наши URL-адреса не перезаписываются и могут попасть в нужное место без какого-либо вмешательства. Меня беспокоит, что теперь каждый запрос должен будет проходить через метод Application_BeginRequest (даже непереписанный URL-адрес), и я боюсь, что это замедлит их загрузку.
Как вы думаете? Является ли время загрузки проблемой при использовании Application_BeginRequest?

url-rewriting

Ответы

Ответ 1 · рейтинг 4 · Joe Ratzer

В любом случае каждый запрос проходит через Application_BeginRequest.

Вам нужно будет добавить некоторую логику, чтобы изменять только те страницы, которые нужно переписать.

Эта небольшая часть логики будет не очень дорогой.

Я использовал его и вообще не заметил снижения производительности.

Ответ 2 · рейтинг 3 · netadictos

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

http://www.codeplex.com/IIRF

or:

http://urlrewriter.net/

http://www.managedfusion.com/products/url-rewriter/

Вы можете прочитать больше вариантов в этом посте:

перезапись URL-адресов ASP.NET

Как говорит Джош, основная статья: http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx

Ответ 3 · рейтинг 3 · adinas

Просто замечание для других, у кого могут быть проблемы. Убедитесь, что у вас есть

<modules runAllManagedModulesForAllRequests="true">

в вашем web.config

Ответ 4 · рейтинг 2 · Timothy Khouri

Эта статья немного устарела ... и теперь в .NET framework есть более подходящие подходы. Что забавно, я делал именно то, что делаете вы (захват обработчика ошибок).

http://www.singingeels.com/Blogs/Nullable/2007/09/14/URL_ReWriting_The_Right_Way_Its_Easy.aspx

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

Ответ 5 · рейтинг 1 · Josh

Скотта Гатри article - хорошая статья, но мне любопытно, почему вы решили сделать это через Global.asax, а не использовать HttpModule, как он предлагает. Кроме того, жизненный цикл страницы Asp.Net в любом случае проходит через каждое из этих событий в Global.asax.

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

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы