253

.NETに現在のプロトコル、ホスト、およびポートをすばやく取得する簡単な方法はありますか?たとえば、次のURLを使用している場合:

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

私は戻る必要があります:

http://www.mywebsite.com:80

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

助言がありますか?

4

7 に答える 7

438

@Rick はこの質問に対して受け入れられた回答を持っていますが、実際には、名前が不十分な方法を使用して、これを行うより短い方法がありますUri.GetLeftPart()

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

ただし、 1 つの落とし穴がありGetLeftPart()ます。ポートがスキームのデフォルト ポートである場合は、それが取り除かれます。ポート 80 は http のデフォルト ポートであるため、GetLeftPart()上記の例の出力はhttp://www.mywebsite.com.

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

于 2009-02-23T15:45:56.450 に答える
184

次の(C#)コードはトリックを行う必要があります

Uri uri = new Uri("http://www.mywebsite.com:80/pages/page1.aspx");
string requested = uri.Scheme + Uri.SchemeDelimiter + uri.Host + ":" + uri.Port;
于 2008-08-22T13:35:39.863 に答える
67

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

これが役立つことを願っています。:)

于 2010-11-16T14:42:41.360 に答える
38

これを取得するためのより構造化された方法は、UriBuilder を使用することです。これにより、文字列の直接操作が回避されます。

var builder = new UriBuilder(Request.Url.Scheme, Request.Url.Host, Request.Url.Port);
于 2011-03-08T21:56:59.850 に答える
23

Request.Urlは、リクエストのURIを返します。それができたら、ほとんど何でも取得できます。プロトコルを取得するには、Schemeプロパティを呼び出します。

サンプル:

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

お役に立てれば。

于 2008-08-22T02:48:54.160 に答える
23

さらに短い方法では、新しい ASP.Net が必要になる場合があります。

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

UriComponents 列挙を使用すると、含めたい URI のコンポーネントを指定できます。

于 2015-09-16T18:07:52.010 に答える
13

ホルガーの答えに非常に似ています。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 クラスはさまざまなメソッドを提供しますが、その多くはここでは挙げていません。

私の例では、 とLocalHost一緒に取得する必要があったPort Numberため、次のようにしました。

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

正常に取得したもの:http://localhost:12345

于 2015-11-14T22:40:55.417 に答える