Как получить исходный 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, но это приложение стороннего разработчика, и я не могу этого сделать.
Любые идеи будут оценены.
Ответы
Ответ 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(), чтобы получить строку, или запросить любой из методов/свойств для получения деталей.