18

HttpContext.Current.Request.Url.HostHttpContext.Current.Request.ApplicationPathを 1 回の呼び出しで取得する方法はありますか?

「完全なアプリケーション URL」のようなものですか?

編集: 明確化 - 私が必要としているのは、[] 内の部分です:

http://[www.mysite.com/mywebapp]/Pages/Default.aspx

単純に興味本位で質問します。

編集 2: すべての返信に感謝しますが、どれも私が探していたものではありませんでした。参考までに、私はこの方法で問題を解決しました(ただし、よりスムーズな方法があるかどうかを知りたいと思っています):

public string GetWebAppRoot()
{
    if(HttpContext.Current.Request.ApplicationPath == "/")
        return "http://" + HttpContext.Current.Request.Url.Host;
    else
        return "http://" + HttpContext.Current.Request.Url.Host + HttpContext.Current.Request.ApplicationPath;
}
4

6 に答える 6

32
public static string GetSiteRoot()
{
  string port = System.Web.HttpContext.Current.Request.ServerVariables["SERVER_PORT"];
  if (port == null || port == "80" || port == "443")
    port = "";
  else
    port = ":" + port;

  string protocol = System.Web.HttpContext.Current.Request.ServerVariables["SERVER_PORT_SECURE"];
  if (protocol == null || protocol == "0")
    protocol = "http://";
  else
    protocol = "https://";

  string sOut = protocol + System.Web.HttpContext.Current.Request.ServerVariables["SERVER_NAME"] + port + System.Web.HttpContext.Current.Request.ApplicationPath;

  if (sOut.EndsWith("/"))
  {
    sOut = sOut.Substring(0, sOut.Length - 1);
  }

  return sOut;
}
于 2009-03-27T14:06:56.390 に答える
18

これは、ポート番号を持つローカルホストでは機能しなかったため、マイナーな変更を加えました。

  private string GetWebAppRoot()
    {
        string host = (HttpContext.Current.Request.Url.IsDefaultPort) ? 
            HttpContext.Current.Request.Url.Host : 
            HttpContext.Current.Request.Url.Authority;
        host = String.Format("{0}://{1}", HttpContext.Current.Request.Url.Scheme, host);            
        if (HttpContext.Current.Request.ApplicationPath == "/")
            return host;
        else
            return host + HttpContext.Current.Request.ApplicationPath;
    }
于 2009-09-28T01:53:41.553 に答える
7

あなたが本当にすべきことは次のとおりです。

return String.Format("{0}://{1}/", Request.Url.Scheme, Request.Url.Host);

そうすれば、HTTPS (または他のスキーマ!) を使用している場合に機能します。

于 2009-08-19T13:46:35.097 に答える
2

この投稿を確認してください:

public static Uri GetBaseUrl(HttpRequest request)
{
    Uri contextUri = new Uri(request.Url, request.RawUrl);
    UriBuilder realmUri = new UriBuilder(contextUri) { Path = request.ApplicationPath, Query = null, Fragment = null };
    return realmUri.Uri;
}

public static string GetAbsoluteUrl(HttpRequest request, string relativeUrl)
{
    return new Uri(GetBaseUrl(request), VirtualPathUtility.ToAbsolute(relativeUrl)).AbsoluteUri;
}

GetBaseUrlから必要なものを直接取得できない場合は、次のことが可能です。

GetAbsoluteUrl(HttpContext.Current.Request, "/")

于 2009-03-27T13:10:37.867 に答える
1
HttpContext.Current.Request.Url.AbsoluteUri
于 2009-03-27T13:11:05.870 に答える