web-dev-qa-db-ja.com

どうやってsiteのbaseurlを手に入れることができますか?

私はサイトのベースURLを返す小さなヘルパーメソッドを書きたいです。これが私が思いついたものです。

public static string GetSiteUrl()
{
    string url = string.Empty;
    HttpRequest request = HttpContext.Current.Request;

    if (request.IsSecureConnection)
        url = "https://";
    else
        url = "http://";

    url += request["HTTP_Host"] + "/";

    return url;
}

あなたが考えることができるこれに何か誤りがありますか?誰もがこれを改善することはできますか?

169
Jaggu

これを試して:

string baseUrl = Request.Url.Scheme + "://" + Request.Url.Authority + 
    Request.ApplicationPath.TrimEnd('/') + "/";
307
Frank Allenby
string baseUrl = Request.Url.GetLeftPart(UriPartial.Authority)

それでおしまい ;)

163
Warlock

残念ながら、一般的なGetLeftPartソリューションは、PCL版のUriではサポートされていません。ただし、GetComponentsは移植性が必要な場合はトリックする必要があります。

uri.GetComponents(
    UriComponents.SchemeAndServer | UriComponents.UserInfo, UriFormat.Unescaped);
8
Todd Menier

上記の答えでは、サイトがWebサイトのルートにない場合は考慮されません。

これはWebApiコントローラ用です。

string baseUrl = (Url.Request.RequestUri.GetComponents(
                    UriComponents.SchemeAndServer, UriFormat.Unescaped).TrimEnd('/') 
                 + HttpContext.Current.Request.ApplicationPath).TrimEnd('/') ;
6
rufo

私にとっては、これまでのところ@ warlockが最良の答えのように見えますが、私はこれまでずっとこれを使ってきました。

string baseUrl = Request.Url.GetComponents(
    UriComponents.SchemeAndServer, UriFormat.UriEscaped)   

またはWebAPIコントローラ内。

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

これは便利なので、あなたが望むエスケープフォーマットを選ぶことができます。このように2つの異なる実装がある理由は明確ではありませんし、私が言える限りでは、このメソッドと@ warlockはまったく同じ結果を返しますが、GetLeftPart()は非サーバーUriでもmailtoタグのように動作する例えば。

6
cirrus

一緒に行く

HttpContext.Current.Request.ServerVariables["HTTP_Host"]
5
Talha

これはもっと愚かな方法です。

VirtualPathUtility.ToAbsolute("~/");
4
Daniel A. White

ウォーロックが書いたことに基づいて、私はあなたがあなたのウェブのルートでホストされていないなら仮想パスルートが必要であることがわかりました。 (これはMVC Web APIコントローラーに有効です)

String baseUrl = Request.RequestUri.GetLeftPart(UriPartial.Authority) 
+ Configuration.VirtualPathRoot;
4
SpazDude

私はApplication_Startから次のコードを使用しています

String baseUrl = Path.GetDirectoryName(HttpContext.Current.Request.Url.OriginalString);

1
Crispijn Lange

これは私のために働きます。

Request.Url.OriginalString.Replace(Request.Url.PathAndQuery, "") + Request.ApplicationPath;
  • Request.Url.OriginalString:ブラウザが表示しているのと同じように完全なパスを返します。
  • Request.Url.PathAndQuery:(完全パス) ドメイン名+ PORT)を返します。
  • ---(Request.ApplicationPath:ホストされているサーバーでは "/"、ローカルでは "アプリケーション名"を返しますIIS deploy。

そのため、自分のドメイン名にアクセスしたい場合は、次の場合にアプリケーション名を含めることを検討してください。

  1. IISの展開
  2. アプリケーションがサブドメインにデプロイされている場合。
1
FAHID
 string baseURL = HttpContext.Request.Url.Host;
0
shebin c babu

以下のコードを使用してください

string.Format("{0}://{1}", Request.url.Scheme, Request.url.Host);
0
Pranav Joseph