Использование Application_BeginRequest для перезаписи URL - PullRequest
2 голосов
/ 01 декабря 2008

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

Ответы [ 5 ]

4 голосов
/ 01 декабря 2008

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

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

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

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

3 голосов
/ 11 февраля 2010

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

<modules runAllManagedModulesForAllRequests="true">

в вашем web.config

3 голосов
/ 01 декабря 2008

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

http://www.codeplex.com/IIRF

или

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

2 голосов
/ 01 декабря 2008

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

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

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

1 голос
/ 01 декабря 2008

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...