2008-08-22 61 views
181

是否有.NET一個簡單的方法來快速獲取當前協議,主機和端口?例如,如果我在以下網址:.NET - 獲取協議,主機和端口

http://www.mywebsite.com:80/pages/page1.aspx

我需要返回:

http://www.mywebsite.com:80

我知道我可以使用Request.Url.AbsoluteUri以獲得完整的URL,我知道我可以使用Request.Url.Authority獲取主機和端口,但我不確定如何在不解析URL字符串的情況下獲取協議的最佳方式。

有什麼建議?

+0

Request.AbsoluteURI – 2013-10-25 08:44:46

+1

見我的回答一個simlar這裏的問題 - http://stackoverflow.com/a/1534478/98740 – WDuffy 2015-06-18 16:33:33

回答

138

以下(C#)代碼應該做的伎倆

Uri uri = new Uri("http://www.mywebsite.com:80/pages/page1.aspx"); 
string requested = uri.Scheme + Uri.SchemeDelimiter + uri.Host + ":" + uri.Port; 
+24

或字符串請求= uri.Scheme + Uri.SchemeDelimiter + uri.Authority; – tranmq 2012-03-01 22:51:34

+11

這可能是錯誤的答案,因爲即使沒有端口,它也會插入「:」。 @dthrasher使用`Uri.GetLeftPart`指出 – gman 2016-01-28 10:49:40

20

Request.Url將返回請求的Uri。一旦你有了,你可以檢索你想要的任何東西。要獲得該協議,請撥打Scheme屬性。

樣品:

Uri url = Request.Url; 
string protocol = url.Scheme; 

希望這有助於。

339

即使@Rick有這個問題,接受的答案,其實有一個更短的方式做到這一點,使用命名不佳Uri.GetLeftPart()方法。

Uri url = new Uri("http://www.mywebsite.com:80/pages/page1.aspx"); 
string output = url.GetLeftPart(UriPartial.Authority); 

這裏有一個陷阱,以GetLeftPart(),但是。如果該端口是該方案的默認端口,則會將其除去。由於端口80是http的默認端口,因此在上例中GetLeftPart()的輸出將爲http://www.mywebsite.com

如果端口號是80以外的東西,它將包含在結果中。

+10

這是我認爲最好的例子。它適用於localhost:port和live實例。 – 2011-10-11 19:13:30

46

那麼如果你在Asp.Net這樣做還是有機會獲得HttpContext.Current.Request 我說的這些都是讓他們更容易和更普遍的方式:

var scheme = Request.Url.Scheme; // will get http, https, etc. 
var host = Request.Url.Host; // will get www.mywebsite.com 
var port = Request.Url.Port; // will get the port 
var path = Request.Url.AbsolutePath; // should get the /pages/page1.aspx part, can't remember if it only get pages/page1.aspx 

我希望這有助於。 :)

23

獲得此結構的更有條理的方法是使用UriBuilder。這避免了直接的字符串操作。

var builder = new UriBuilder(Request.Url.Scheme, Request.Url.Host, Request.Url.Port); 
12

甚至更​​短的方式,可能需要新的ASP.Net:

string authority = Request.Url.GetComponents(UriComponents.SchemeAndServer,UriFormat.Unescaped) 

的UriComponents枚舉,您可以指定要包括的URI的組分。

7

與Holger的回答非常相似。如果您需要獲取URL可以這樣做:

Uri uri = Context.Request.Url;   
var scheme = uri.Scheme // returns http, https 
var scheme2 = uri.Scheme + Uri.SchemeDelimiter; // returns http://, https:// 
var host = uri.Host; // return www.mywebsite.com 
var port = uri.Port; // returns port number 

Uri class提供的,我還沒有上市方法,有很多的整個範圍。

在我的情況下,我需要抓住與Port Number一起LocalHost,所以這是我做過什麼:

var Uri uri = Context.Request.Url; 
var host = uri.Scheme + Uri.SchemeDelimiter + uri.Host + ":" + uri.Port; 

成功地抓住了:http://localhost:12345

相關問題