ASP.NETでルートドメインURIを取得するにはどうすればよいですか?


96

たとえば、http: //www.foobar.comでWebサイトをホストしているとします。

私のコードビハインドで" http://www.foobar.com/ "をプログラムで確認する方法はありますか(つまり、Web構成でハードコードする必要がない)。


7
それはリクエストに依存するため、Requestオブジェクトを調べてみるとよいでしょう。
ジョンサンダース

回答:


79

HttpContext.Current.Request.Urlは、URLに関するすべての情報を取得できます。また、URLをフラグメントに分解できます。


4
はい、なぜ反対票ですか。回答としてマークされたものは表示されず、頻繁に反対投票されます。:/
ザック

4
私もこの答えが好きではありません。bleshが正しいものを与えており、これが答えとしてマークされているはずです...
Michal B.

-1-Request.Urlは "/ folder1 / folder2"などのURLを提供し、ドメインを完全に除外します。
ジャスティン

4
@Justin:Request.Urlは、すべての断片が分解されたUriオブジェクトを提供します。それはあなたに文字列を与えるべきではありません。少なくとも、私が使用している.netのバージョンではありません
JoshBerke

6
この回答は、以下の回答のように機能するコードを追加することで改善でき、投票数が増加します...
theJerm

171
string baseUrl = Request.Url.GetLeftPart(UriPartial.Authority);

Uri :: GetLeftPartメソッド

GetLeftPartメソッドは、URI文字列の左端の部分を含み、partで指定された部分で終了する文字列を返します。

UriPartial列挙

URIのスキームと権限セグメント。


5
URLを解析するよりもはるかに優れています!
Evgenyt 2013

1
これがベストアンサーです!tnx!
AminM 2013年

これが選択された答えです。不要な文字列操作が多すぎます。
Ghasan

1
この方法を使用すると、http:// www.lala.xxx/blah/blahはhttp:// www.lala.xxxを返します
live-love

+1そして.Authorityと同じではありません-私がlocalhostで行ったテストでは-プロトコル(http://)の部分を省略しています。
GGleGrand 2016年

122

まだ疑問に思っている人のために、より完全な答えはhttp://devio.wordpress.com/2009/10/19/get-absolut-url-of-asp-net-application/で入手できます

public string FullyQualifiedApplicationPath
{
    get
    {
        //Return variable declaration
        var appPath = string.Empty;

        //Getting the current context of HTTP request
        var context = HttpContext.Current;

        //Checking the current context content
        if (context != null)
        {
            //Formatting the fully qualified website url/name
            appPath = string.Format("{0}://{1}{2}{3}",
                                    context.Request.Url.Scheme,
                                    context.Request.Url.Host,
                                    context.Request.Url.Port == 80
                                        ? string.Empty
                                        : ":" + context.Request.Url.Port,
                                    context.Request.ApplicationPath);
        }

        if (!appPath.EndsWith("/"))
            appPath += "/";

        return appPath;
    }
}

4
完璧に働きました。サイトがserver:8080 / MySiteNameの場合、正しく取得されます。
マイケルラヴォワ

2
リンクの代わりに実際のコードをどこかで共有してくれてありがとう。
theJerm

2
context.Request.Url.Port == 80はHTTPS内で問題を引き起こす
Evgenyt

7
注意!httpsでは機能しません。HTTPSの場合は交換する必要がある context.Request.Url.Port == 80 ことにより、(context.Request.Url.Port == 80 && context.Request.Url.Scheme == "http") || (context.Request.Url.Port == 443 && context.Request.Url.Scheme == "https")または使用の答えの下に
razon

1
localhostでも機能します(localyをテストしている場合)。ポートが必要ない場合は、 "http://" + HttpContext.Current.Request.Url.Host;を使用できます。
Cyber​​Hawk

32

たとえば、URLがhttp://www.foobar.com/Page1の場合

HttpContext.Current.Request.Url; //returns "http://www.foobar.com/Page1"


HttpContext.Current.Request.Url.Host; //returns "www.foobar.com"


HttpContext.Current.Request.Url.Scheme; //returns "http/https"


HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority); //returns "http://www.foobar.com"

1
いやいや。.Hostので"http://www.foobar.com/Page1"www.foobar.comなく、foobar.comです。
-tchelidze

1
はい、あなたは正しい、答えを更新しました。@tchelidzeありがとう
Dheeraj Palagiri


16

リクエストURL文字列全体を取得するには:

HttpContext.Current.Request.Url

リクエストのwww.foo.com部分を取得するには:

HttpContext.Current.Request.Url.Host

ASP.NETアプリケーションの外部の要素のなすがままになっていることに注意してください。IISがアプリケーションの複数または任意のホストヘッダーを受け入れるように構成されている場合、ユーザーが入力したドメインに応じて、DNSを介してアプリケーションに解決されたドメインが要求URLとして表示される場合があります。


1
ここで最も簡単なソリューション
full_prog_full 2016

4
Match match = Regex.Match(host, "([^.]+\\.[^.]{1,3}(\\.[^.]{1,3})?)$");
string domain = match.Groups[1].Success ? match.Groups[1].Value : null;

host.com => return host.com
s.host.com => return host.com

host.co.uk => host.co.ukを返す
www.host.co.uk => host.co.ukを
返すs1.www.host.co.uk => host.co.ukを返す


これは古い投稿ですが、NQuenaultはうまくやっていると思います。RegexExpressionsはあまりよくできていません。まさに私が必要としたもの。
JeffreyJ

@nquenault www.abc.comのようなホスト名を処理するための最善の方法についての考えはありますか?ありがとう!
Gary Ewan Park、

4

-ポートを追加すると、IIS Expressの実行時に役立ちます

Request.Url.Scheme + "://" + Request.Url.Host + ":" + Request.Url.Port


3

私はこれが古いことを知っていますが、今これを行う正しい方法は

string Domain = HttpContext.Current.Request.Url.Authority

それはサーバーのポートでDNSまたはIPアドレスを取得します。



1

以下のC#の例:

string scheme = "http://";
string rootUrl = default(string);
if (Request.ServerVariables["HTTPS"].ToString().ToLower() == "on")
{
  scheme = "https://";
}
rootUrl = scheme + Request.ServerVariables["SERVER_NAME"].ToString();

1
string host = Request.Url.Host;
Regex domainReg = new Regex("([^.]+\\.[^.]+)$");
HttpCookie cookie = new HttpCookie(cookieName, "true");
if (domainReg.IsMatch(host))
{
  cookieDomain = domainReg.Match(host).Groups[1].Value;                                
}

1

これは具体的にあなたが求めているものを返します。

Dim mySiteUrl = Request.Url.Host.ToString()

私はこれが古い質問であることを知っています。しかし、私は同じ単純な答えを必要としており、これは要求されたものを正確に返します(http://なしで)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.