2009-02-27 2 views
539

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

+7

@ Gordon Итак, что это? Вы отметили этот вопрос как дубликат ... ВОПРОС, КОТОРЫЙ ВЫ ПОЗВОЛИЛИ, ЧТО ТАКОЕ ДУБЛИКАТ СЛИШКОМ, ОДИН МИНУТ ПОЗЖЕ. Возможно, нам нужен запрос функции, чтобы StackOverflow добавлял «no follow» к отмеченным дубликатам, потому что все, что я хотел, было ответом, и поисковая система сначала привела меня сюда. Однако я не буду делать такой запрос, чтобы он не был помечен как дубликат. :( –

+2

@MarkAllen не уверен, почему вы кричите на меня, если вы будете следовать за обманами, вы в конечном итоге станете самым старым вопросом (я мог бы найти тогда), спрашивая об этом. Что из этого? Ну, все они. Неважно, где вы оказались в поиске. На этой странице вы получите 14 ответов, закрытое против одного дает вам 15, а оригинал дает вам еще 11. Если я не буду закрывать их, вы получите только 14, а не 40. Обратите внимание, что у вас есть менее 10 тыс. репутации, поэтому вы не видите удаленных. – Gordon

+6

@Gordon Извините, если колпаки вас обидели. Было бы неплохо, если бы обманы могли быть выставлены на одной объединенной странице. –

ответ

791

Попробуйте это:

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, таких как http://twitter.com/#!/user , Вы можете использовать метод Фрагмент, чтобы получить что-нибудь после фунта (#). –

+2

На самом деле это неверно при использовании с механизмом перезаписи, например UrlRewriter.net, потому что это даст переписанный URL. Затем вы можете использовать: Request.Url.GetLeftPart (UriPartial.Authority) + Request.RawUrl –

+0

что вы делаете, если 'HttpContext.Current' равно null? – drzaus

41

, если вы просто хотите часть между HTTP: // и первый слэш

string url = Request.Url.Host; 

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

Вот complete breakdown

+12

Не включает порт. Нужна: 'HttpContext.Current.Request.Url.Port'. – JohnB

+1

@JohnB или, скорее, 'HttpContext.Current.Request.Url.Authority', извлечение' host: port' одним вызовом ... –

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 

Regex путь:

Getting parts of a URL (Regex)

+1

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

87

Просто обмена, как это было мое решение, благодаря сообщению 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/" 
+1

Просто для указания очевидного: HttpContext находится в System.Web, то есть System.Web.HttpContext. msdn: http://msdn.microsoft.com/en-us/library/system.web.httpcontext.aspx – Sindre

+9

Еще проще: 'Request.Url.GetLeftPart (UriPartial.Authority)' Смотрите здесь: https: // msdn .microsoft.com/en-us/library/system.uri.getleftpart (v = vs.110) .aspx –

5

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

Path.GetFileName(Request.Url.AbsolutePath) 

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

+0

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

12

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

localhost:2806 

из

http://localhost:2806/Pages/ 

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

HttpContext.Current.Request.Url.Authority 
372

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

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

Пример: (Пример URL)

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

КОД

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); 

ВЫХОД

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, если вы можете использовать ASP Routing, тогда вам не нужно использовать традиционный URL-адрес с строкой запроса.

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

10

наконечник для тех, кто нуждается путь/URL в global.asax файле;

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

запрос не доступен в этом контексте исключения в Application_Start.

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

System.Web.HttpRuntime.AppDomainAppVirtualPath

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

16

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

HttpContext.Current.Request.RawUrl

Смежные вопросы