2008-08-22 7 views
181

に簡単な方法がありますか。現在のプロトコル、ホスト、およびポートをすばやく取得できますか?私は、次のURLによたとえば、:.NET - プロトコル、ホスト、およびポートを取得する

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

私は返す必要があります:

http://www.mywebsite.com:80

私は完全なURLを取得するためにRequest.Url.AbsoluteUriを使用することができます知っている、と私は知っていますRequest.Url.Authorityを使用してホストとポートを取得することはできますが、URL文字列を解析せずにプロトコルを取得する最良の方法は不明です。

提案がありますか?

+0

Request.AbsoluteURI –

+1

がsimlarに私の答えを参照してください:首尾よくつかん

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

ここでの質問 - http://stackoverflow.com/a/1534478/98740 – WDuffy

答えて

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

+11

これはおそらく間違った答えです。ポートがない場合でも ":"が挿入されるからです。 @dthrasherが指摘するように 'Uri.GetLeftPart'を使用してください – gman

20

Request.UrlからリクエストのUriが返されます。いったんそれができれば、あなたが望むものをほとんど取り出すことができます。プロトコルを取得するには、Schemeプロパティを呼び出します。

サンプル:

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

は、この情報がお役に立てば幸いです。 @Rickは、この質問のために受け入れ答えを持っているにもかかわらず

339

を行う必要があり、これを行うには短い方法が悪いという名前Uri.GetLeftPart()方法を使用して、実際にあります。

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

GetLeftPart()にはキャッチが1つありますが、ポートがスキームのデフォルトポートである場合は、それを除去します。ポート80はhttpのデフォルトポートなので、上記の例のGetLeftPart()の出力はhttp://www.mywebsite.comになります。

ポート番号が80以外の場合は、結果に含まれます。まあ

+10

これは私の意見では最良の例です。 localhost:portとliveインスタンスで動作します。 –

+0

これはlocalhost:portで動作するので+1します –

+8

GetLeftPart - 本当にOMGの素敵な名前です。 –

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 

私はこれが役に立てば幸い。 :)

+1

私はこのメソッドを好む、私は欲しいだけのピースを取得することができますかどうか、文字列がポートを取得するために十分に形成されているかどうか心配する必要はありません。 +1 – Jrud

+0

これらのプロパティの詳細:http://blog.jonschneider.com/2014/10/systemuri-net-framework-45-visual-guide.html –

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のどのコンポーネント(複数可)を指定することができます。

+1

PCL(.GetLeftPart())で動作するため、利用可能ではありません) – Sascha

7

Holgerの答えによく似ています。

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は、私がリストされていない方法で、多くの全範囲を提供します。あなたのような何かを行うことができますURLをつかむために必要がある場合。私の例では

は、私がPort Numberと一緒にLocalHostをつかむために必要なので、これは私がやったことです:http://localhost:12345

関連する問題