До сих пор мы переписывали URL-адреса, используя страницу custon 404: URL-адрес не сопоставлялся ни с одним файлом на сайте, и мы настроили IIS для отправки ошибки 404 на страницу aspx, которая перенаправляла эти URL-адреса на правильный URL-адрес. Теперь мы хотим прекратить использовать перенаправления, поэтому после прочтения статьи Скотта Гатри о переопределении URL-адресов я хочу использовать Application_BeginRequest в Global.asax. Дело в том, что многие наши URL-адреса не перезаписываются и могут попасть в нужное место без какого-либо вмешательства. Меня беспокоит, что теперь каждый запрос должен будет проходить через метод Application_BeginRequest (даже непереписанный URL-адрес), и я боюсь, что это замедлит их загрузку.
Как вы думаете? Является ли время загрузки проблемой при использовании Application_BeginRequest?
Вопрос
Использование Application_BeginRequest для перезаписи URL
Ответы
Ответ 1 · рейтинг 4 · Joe Ratzer
В любом случае каждый запрос проходит через Application_BeginRequest.
Вам нужно будет добавить некоторую логику, чтобы изменять только те страницы, которые нужно переписать.
Эта небольшая часть логики будет не очень дорогой.
Я использовал его и вообще не заметил снижения производительности.
Ответ 2 · рейтинг 3 · netadictos
Есть очень надежные решения, если вы собираетесь использовать его чаще и которые имитируют модуль 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
Ответ 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.
Похожие материалы
- Перезапись URL-адреса IIS - соответствие шаблону
- Отладка сайта ASP.NET 4.0 в VS 2010 с включенной перезаписью URL
- UrlRewriteFilter Прямая ссылка на https
- Модуль перезаписи URL-адресов, Azure и web.config
- Почему я получаю ответ XML на запрос jsonp?
- Можем ли мы использовать Response.Flush () вместо Response.End ()