До сих пор мы переписывали URL-адреса, используя страницу custon 404: URL-адрес не сопоставлялся ни с одним файлом на сайте, и мы настроили IIS для отправки ошибки 404 на страницу aspx, которая перенаправляла эти URL-адреса на правильный URL-адрес. < br> Теперь мы хотим прекратить использовать перенаправления, поэтому после прочтения статьи Скотта Гатри о переопределении URL-адресов я хочу использовать Application_BeginRequest в Global.asax. Дело в том, что многие наши URL-адреса не перезаписываются и могут попасть в нужное место без какого-либо вмешательства. Меня беспокоит, что теперь каждый запрос должен будет проходить через метод Application_BeginRequest (даже непереписанный URL-адрес), и я боюсь, что это замедлит их загрузку.
Как вы думаете? Является ли время загрузки проблемой при использовании Application_BeginRequest?
Использование Application_BeginRequest для перезаписи URL
Ответы (5)
В любом случае каждый запрос проходит через Application_BeginRequest.
Вам нужно будет добавить некоторую логику, чтобы изменять только те страницы, которые нужно переписать.
Эта небольшая часть логики будет не очень дорогой.
Я использовал его и вообще не заметил снижения производительности.
Есть очень надежные решения, если вы собираетесь использовать его чаще и которые имитируют модуль Apache mod_rewrite, мне нравится этот, потому что я его использовал, и это не дало мне никаких проблем:
or:
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
Просто замечание для других, у кого могут быть проблемы. Убедитесь, что у вас есть
<modules runAllManagedModulesForAllRequests="true">
в вашем web.config
Эта статья немного устарела ... и теперь в .NET framework есть более подходящие подходы. Что забавно, я делал именно то, что делаете вы (захват обработчика ошибок).
http://www.singingeels.com/Blogs/Nullable/2007/09/14/URL_ReWriting_The_Right_Way_Its_Easy.aspx
Я думаю, вы хотите этим заниматься сейчас. Да, и насчет производительности ... это добавляет около 0,00001 секунды к времени вашей страницы.
Скотта Гатри article - хорошая статья, но мне любопытно, почему вы решили сделать это через Global.asax, а не использовать HttpModule, как он предлагает. Кроме того, жизненный цикл страницы Asp.Net в любом случае проходит через каждое из этих событий в Global.asax.
События HttpModule запускают каждый запрос, и пока вы не делаете ничего сумасшедшего в своей логике, все должно быть в порядке. Даже поиск в базе данных в методе Application_BeginRequest можно уменьшить за счет правильного кэширования.
А в случае сомнений напишите некоторую информацию в трассировке по порядку чтобы точно узнать, сколько времени занимает ваша рутина. Я думаю, вы обнаружите, что по сравнению с вашими самыми дорогими операциями (поиском в базе данных) время будет незначительным.