Как получить URL текущей страницы в C # [duplicate]

523

Может ли кто-нибудь помочь мне получить URL-адрес текущей рабочей страницы ASP.NET на С#?

  • 11
    @ Гордон Так что это? Вы пометили этот вопрос как дубликат ... ВОПРОСА, КОТОРЫЙ ВЫ ОТМЕТИЛИ, ЧТО ДУБЛИРУЕТЕ СЛИШКОМ, ОДНА МИНУТУ ПОЗЖЕ. Возможно, нам нужен запрос функции, чтобы StackOverflow добавлял «нет подписки» к отмеченным дубликатам, потому что все, что я хотел, - это ответ, и поисковая система сначала привела меня сюда. Однако я не буду делать такой запрос, чтобы он не был отмечен как дубликат. :(
  • 2
    @MarkAllen не уверен, почему ты кричишь на меня? если вы будете следовать за обманщиками, вы получите самый старый вопрос (я смог найти тогда), задающий этот вопрос. Что из этого? Ну, все из них. Неважно, где вы закончили поиск. На этой странице вы получите 14 ответов, закрытое против одного - 15, а оригинальное - еще 11. Если я не закрою их вопросы, вы получите только 14, а не 40. Обратите внимание, что у вас менее 10 тыс. Респ. так что вы не видите удаленные.
Показать ещё 3 комментария
Теги:

9 ответов

811

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

string url = HttpContext.Current.Request.Url.AbsoluteUri;
// http://localhost:1302/TESTERS/Default6.aspx

string path = HttpContext.Current.Request.Url.AbsolutePath;
// /TESTERS/Default6.aspx

string host = HttpContext.Current.Request.Url.Host;
// localhost
  • 4
    Похоже, что AbsolutePath возвращает «/» в .NET 3.5 (не проверял другие версии) для путей, аналогичных учетным записям пользователей в твиттере, таких как twitter.com/#!/user . Вы можете использовать метод Fragment, чтобы получить что-нибудь после фунта (#).
  • 3
    На самом деле это не правильно при использовании с механизмом перезаписи, таким как UrlRewriter.net, потому что это даст переписанный URL. Затем вы можете использовать: Request.Url.GetLeftPart (UriPartial.Authority) + Request.RawUrl
Показать ещё 7 комментариев
333

Иногда вы можете получать разные значения из URL.

Ниже приведен пример различных способов извлечения разных частей URL

ПРИМЕР: (Пример URL)

http://localhost:60527/WebSite1test/Default2.aspx?QueryString1=1&QueryString2=2

CODE

Response.Write("<br/> " + HttpContext.Current.Request.Url.Host);
Response.Write("<br/> " + HttpContext.Current.Request.Url.Authority);
Response.Write("<br/> " + HttpContext.Current.Request.Url.Port);
Response.Write("<br/> " + HttpContext.Current.Request.Url.AbsolutePath);
Response.Write("<br/> " + HttpContext.Current.Request.ApplicationPath);
Response.Write("<br/> " + HttpContext.Current.Request.Url.AbsoluteUri);
Response.Write("<br/> " + HttpContext.Current.Request.Url.PathAndQuery);

OUTPUT

localhost
localhost:60527
60527
/WebSite1test/Default2.aspx
/WebSite1test
http://localhost:60527/WebSite1test/Default2.aspx?QueryString1=1&QueryString1=2
/WebSite1test/Default2.aspx?QueryString1=1&QueryString2=2

Вы можете скопировать пасту над примером кода и запустить ее в приложении веб-формы asp.net с другим URL-адресом.

Я также рекомендую читать ASP.Net Routing, если вы можете использовать ASP Routing, тогда вам не нужно использовать традиционный URL-адрес с строкой запроса.

http://msdn.microsoft.com/en-us/library/cc668201%28v=vs.100%29.aspx

81

Просто поделился, так как это было моим решением благодаря сообщению Canavar.

Если у вас есть что-то вроде этого:

"http://localhost:1234/Default.aspx?un=asdf&somethingelse=fdsa"

или вот так:

"https://www.something.com/index.html?a=123&b=4567"

и вам нужна только часть, которую пользователь будет вводить, тогда это будет работать:

String strPathAndQuery = HttpContext.Current.Request.Url.PathAndQuery;
String strUrl = HttpContext.Current.Request.Url.AbsoluteUri.Replace(strPathAndQuery, "/");

что приведет к следующим:

"http://localhost:1234/"
"https://www.something.com/"
39

если вам просто нужна часть между http://и первой косой чертой

string url = Request.Url.Host;

будет возвращать stackoverflow.com, если вызвано с этой страницы

Здесь полная разбивка

  • 12
    Не включает порт. Нужно: HttpContext.Current.Request.Url.Port .
  • 2
    @JohnB или, скорее, HttpContext.Current.Request.Url.Authority , выборка host:port с одним вызовом ...
Показать ещё 1 комментарий
15

request.rawurl предоставит содержимое текущей страницы он дает точный путь, который вам нужен

использовать HttpContext.Current.Request.RawUrl

12

Если вы хотите получить

localhost:2806 

из

http://localhost:2806/Pages/ 

затем используйте:

HttpContext.Current.Request.Url.Authority
10

подсказка для людей, которым нужен путь /url в файле global.asax;

Если вам нужно запустить это в global.asax > Application_Start, а режим пула приложений интегрирован, вы получите сообщение об ошибке ниже:

Запрос в этом контексте не доступен. Application_Start.

В этом случае вам нужно использовать это:

System.Web.HttpRuntime.AppDomainAppVirtualPath

Надежда поможет другим.

7

Поиск приземлился на этой странице, но это было не совсем то, что я искал. Проводятся здесь, если кто-то еще ищет то, что я приземлялся на этой странице тоже.

Существует два способа сделать это, если у вас есть только строковое значение.

Способ .NET:

То же, что и @Canavar, но вы можете создать новый объект Uri

String URL = "http://localhost:1302/TESTERS/Default6.aspx";
System.Uri uri = new System.Uri(URL);

что означает, что вы можете использовать те же методы, например.

string url = uri.AbsoluteUri;
// http://localhost:1302/TESTERS/Default6.aspx

string host = uri.host
// localhost

Регулярный путь:

Получение частей URL (Regex)

  • 1
    Также стоит отметить, что если строка не может быть проанализирована, она выдаст исключение System.FormatException. Однако метод System.Uri.TryCreate был представлен в .NET 4.
5

Я думаю, его достаточно, чтобы вернуть абсолютный путь.

 Path.GetFileName( Request.Url.AbsolutePath )

с использованием System.IO;

  • 1
    Я не думаю, что это удовлетворит OP, потому что он дает только имя страницы :(

Ещё вопросы

Сообщество Overcoder
Наверх
Меню