.NET - プロトコル、ホスト、ポートを取得する
質問
.NET で現在のプロトコル、ホスト、ポートをすばやく取得する簡単な方法はありますか?たとえば、次の URL にアクセスしているとします。
http://www.mywebsite.com:80/pages/page1.aspx
返す必要があります:
http://www.mywebsite.com:80
使えることはわかっています Request.Url.AbsoluteUri
完全な URL を取得するには、次を使用できることがわかりました。 Request.Url.Authority
ホストとポートを取得しますが、URL 文字列を解析せずにプロトコルを取得する最良の方法がわかりません。
助言がありますか?
解決
次の (C#) コードでうまくいくはずです。
Uri uri = new Uri("http://www.mywebsite.com:80/pages/page1.aspx");
string requested = uri.Scheme + Uri.SchemeDelimiter + uri.Host + ":" + uri.Port;
他のヒント
@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 以外だった場合、それが結果に含まれます。
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
これがお役に立てば幸いです。:)
これを取得するためのより構造化された方法は、UriBuilder を使用することです。これにより、文字列の直接操作が回避されます。
var builder = new UriBuilder(Request.Url.Scheme, Request.Url.Host, Request.Url.Port);
さらに短い方法では、新しい ASP.Net が必要になる場合があります。
string authority = Request.Url.GetComponents(UriComponents.SchemeAndServer,UriFormat.Unescaped)
UriComponents 列挙型を使用すると、含める URI のコンポーネントを指定できます。
ホルガーの答えと非常によく似ています。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
の ウリクラス にはさまざまなメソッドが用意されていますが、その多くはリストされていません。
私の例では、取得する必要がありました LocalHost
一緒に Port Number
, 、それでこれが私がやったことです:
var Uri uri = Context.Request.Url;
var host = uri.Scheme + Uri.SchemeDelimiter + uri.Host + ":" + uri.Port;
成功したもの: http://localhost:12345