Подтвердить что ты не робот

Как получить исходный URL-адрес после вызова HttpContext.RewritePath()

Я работаю над веб-приложением, которое использует сторонний HttpModule, который выполняет переписывание URL.

Я хочу знать, есть ли способ определить исходный url позже в событии Application_BeginRequest. Например...

Оригинальный URL:
http://domain.com/products/cool-hat.aspx

Переписанный URL (от стороннего httpmodule):
http://domain.com/products.aspx?productId=123

В прошлом я написал HttpModules, которые хранят исходный url в HttpContext.Items, но это приложение стороннего разработчика, и я не могу этого сделать.

Любые идеи будут оценены.

4b9b3361

Ответ 1

Создайте новый HttpModule, который будет служить оболочкой (наследует) сторонний модуль и сделает все, что вам нужно.

В вашем случае переопределите соответствующую функцию (ProcessRequest?) и сохраните исходный url в HttpContext.Items, а затем вызовите реализацию MyBase. Должен работать нормально.

Ответ 2

Попробуйте следующее:

string originalUrl = HttpContext.Current.Request.RawUrl;

Исходный URL-адрес внутри этого свойства.

Ответ 3

У меня была та же проблема, но мне нужен полный URL (RawUrl дает вам только часть "Путь и запрос" ). Итак, чтобы ответить на вопрос Джоша:

string originalUrlFull = 
   Page.Request.Url.GetLeftPart(System.UriPartial.Authority) + 
   Page.Request.RawUrl

Ответ 4

Я знаю, что этот вопрос был задан давно. Но это то, что я использую:

System.Uri originalUri = new System.Uri(Page.Request.Url, Page.Request.RawUrl)

Как только у вас есть URI, вы можете сделать ToString(), чтобы получить строку, или запросить любой из методов/свойств для получения деталей.