web-dev-qa-db-ja.com

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

http://www.foobar.com でWebサイトをホストしているとしましょう。

プログラムビハインドコードで「 http://www.foobar.com/ 」をプログラムで確認できる方法はありますか(つまり、Web設定でハードコードする必要はありません)?

89
core

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

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

ri :: GetLeftPartメソッド

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

riPartial列挙

URIのスキームおよび権限セグメント。

159
George

まだ疑問に思っている人のために、より完全な答えが 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;
    }
}
122
Brian Hasden

例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"
27
string hostUrl = Request.Url.Scheme + "://" + Request.Url.Host; //should be "http://hostnamehere.com"
27
Ben Lesh

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

HttpContext.Current.Request.Url

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

HttpContext.Current.Request.Url.Host

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

16
Rex M

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

Request.Url.Scheme + "://" + Request.Url.Host + ":" + Request.Url.Port
4
JonathanC
Match match = Regex.Match(Host, "([^.]+\\.[^.]{1,3}(\\.[^.]{1,3})?)$");
string domain = match.Groups[1].Success ? match.Groups[1].Value : null;

Host.com => Host.comを返す
s.Host.com => Host.comを返す

Host.co.uk => Host.co.ukを返します
www.Host.co.uk => Host.co.ukを返す
s1.www.Host.co.uk => Return Host.co.uk

3
NQuenault

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

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

これにより、サーバーのポートを持つDNSまたはIPアドレスが取得されます。

3
idlehands23

これも機能します:

string url = HttpContext.Request.Url.Authority;

string domainName = Request.Url.Host
3
Sk93

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

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

これは古い質問です。しかし、私は同じ簡単な答えが必要で、これは(http://なしで)尋ねられたものを正確に返します。

1
tomepenn

以下の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
Saul Dolgin
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
Shawn Constance