Получить точный URL, введенный пользователем в браузер - PullRequest
8 голосов
/ 16 апреля 2009

Я хотел бы получить точный URL, который пользователь ввел в браузер. Конечно, я всегда мог использовать что-то вроде Request.Url.ToString(), но это не дает мне того, что я хочу, в следующей ситуации:

http://www.mysite.com/rss

С URL выше, что Request.Url.ToString() даст мне:

http://www.mysite.com/rss/Default.aspx

Кто-нибудь знает, как этого добиться?

Я уже пробовал:

  • Request.Url
  • Request.RawUrl
  • this.Request.ServerVariables["CACHE_URL"]
  • this.Request.ServerVariables["HTTP_URL"]
  • ((HttpWorkerRequest)((IServiceProvider)HttpContext.Current).GetService(typeof(HttpWorkerRequest))).GetServerVariable( "CACHE_URL")
  • ((HttpWorkerRequest)((IServiceProvider)HttpContext.Current).GetService(typeof(HttpWorkerRequest))).GetServerVariable( "HTTP_URL")

Ответы [ 6 ]

6 голосов
/ 16 апреля 2009

Редактировать: Вы хотите HttpWorkerRequest.GetServerVariable() с клавишей HTTP_URL или CACHE_URL. Обратите внимание, что поведение отличается в IIS 5 и IIS 6 (см. Документацию по ключам).

Чтобы иметь возможность доступа ко всем серверным переменным (в случае, если вы получаете null), напрямую обратитесь к HttpWorkerRequest:

HttpWorkerRequest workerRequest = 
  (HttpWorkerRequest)((IServiceProvider)HttpContext.Current)
  .GetService(typeof(HttpWorkerRequest)); 
4 голосов
/ 17 апреля 2009

Помните также, что «точный URL, который ввел пользователь», возможно, никогда не будет доступен на сервере. Каждая ссылка в цепочке от пальцев к серверу может немного изменить запрос.

Например, если я введу xheo.com в окно своего браузера, IE автоматически преобразуется в http://www.xheo.com. Затем, когда запрос попадает в IIS, он говорит браузеру - вы действительно хотите страницу по умолчанию на http://www.xheo.com/Default.aspx., поэтому браузер отвечает, запрашивая страницу по умолчанию.

То же самое происходит с запросами перенаправления HTTP 30x. Сервер, скорее всего, увидит только последний запрос, сделанный браузером.

3 голосов
/ 20 октября 2009

Попробуйте использовать Request.Url.OriginalString Может дать вам то, что вы ищете.

0 голосов
/ 29 апреля 2014

Возможно, вам просто нужно объединить несколько значений из объекта запроса, чтобы восстановить точный введенный URL:

Dim pageUrl As String = String.Format("{0}://{1}{2}", 
    Request.Url.Scheme, 
    Request.Url.Host, 
    Request.RawUrl)

Response.Write(pageUrl)

Ввод адреса http://yousite.com/?hello возвращает точно:

http://yousite.com/?hello
0 голосов
/ 23 сентября 2011

Самый простой способ сделать это - использовать клиентское программирование для извлечения точного URL:

<script language="javascript" type="text/javascript"> 
document.write (document.location.href); 
</script>
0 голосов
/ 17 апреля 2009
Request.RawUrl

Я думаю, это та обезьяна, за которой вы охотитесь ...

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