在asp.net中获取应用程序根目录的绝对uri的最快方法是什么?

时间:2008-10-21 17:49:17

标签: c# asp.net

获取最简单的方法是什么:asp.net中的http://www.[Domain].com

似乎没有一种方法可以做到这一点,我知道的唯一方法是在服务器变量或Request.Url上做一些字符串杂技。任何人吗?

10 个答案:

答案 0 :(得分:3)

我们可以使用Uri和他的baseUri构造函数:

  • new Uri(this.Request.Url, "/")代表网站的根
  • new Uri(this.Request.Url, this.Request.ResolveUrl("~/"))代表网站的根

答案 1 :(得分:2)

你可以使用这样的东西。

System.Web.HttpContext.Current.Server.ResolveUrl("~/")

它映射到应用程序的根目录。现在,如果您在虚拟目录中,则需要做更多的工作。

修改

旧帖子包含不正确的方法调用!

答案 2 :(得分:2)

你可以这样做:

string.Format("{0}://{1}:{2}", Request.Url.Scheme, Request.Url.Host, Request.Url.Port)

您将获得generic URI syntax< protocol>://< host>:< port>

答案 3 :(得分:2)

我真的很喜欢CMS使用String.Format和Page.Request变量处理这个问题的方式。我只想稍微调整一下。我刚刚在我的一个页面上测试过,所以,我将在这里复制代码:

String baseURL = string.Format(
   (Request.Url.Port != 80) ? "{0}://{1}:{2}" : "{0}://{1}", 
    Request.Url.Scheme, 
    Request.Url.Host, 
    Request.Url.Port)

答案 4 :(得分:1)

System.Web.UI.Page.Request.Url

答案 5 :(得分:1)

this.Request.Url.Host

答案 6 :(得分:1)

我在页面上使用此属性来处理案例虚拟目录和默认端口:

string FullApplicationPath {
    get {
        StringBuilder sb = new StringBuilder();
        sb.AppendFormat("{0}://{1}", Request.Url.Scheme, Request.Url.Host);

        if (!Request.Url.IsDefaultPort)
            sb.AppendFormat(":{0}", Request.Url.Port);

        if (!string.Equals("/", Request.ApplicationPath))
            sb.Append(Request.ApplicationPath);

        return sb.ToString();
    }
}

答案 7 :(得分:0)

此方法处理http / https,端口号和查询字符串。

'Returns current page URL 
Function fullurl() As String
    Dim strProtocol, strHost, strPort, strurl, strQueryString As String
    strProtocol = Request.ServerVariables("HTTPS")
    strPort = Request.ServerVariables("SERVER_PORT")
    strHost = Request.ServerVariables("SERVER_NAME")
    strurl = Request.ServerVariables("url")
    strQueryString = Request.ServerVariables("QUERY_STRING")

    If strProtocol = "off" Then
        strProtocol = "http://"
    Else
        strProtocol = "https://"
    End If

    If strPort <> "80" Then
        strPort = ":" & strPort
    Else
        strPort = ""
    End If

    If strQueryString.Length > 0 Then
        strQueryString = "?" & strQueryString
    End If

    Return strProtocol & strHost & strPort & strurl & strQueryString
End Function

答案 8 :(得分:0)

我必须处理类似的事情,我需要一种方法来以编程方式将标记设置为指向我的网站根目录。

由于localhost和虚拟目录的原因,已接受的解决方案对我不起作用。

所以我提出了以下解决方案,它适用于带有或不带虚拟目录的localhost,当然也适用于IIS网站。

string.Format("{0}://{1}:{2}{3}", Request.Url.Scheme, Request.Url.Host, Request.Url.Port, ResolveUrl("~")

答案 9 :(得分:0)

到目前为止,结合我在这个问题上看到的最好的东西,这个照顾:​​

  1. http和https
  2. 标准端口(80,443)和非标准端口
  3. 托管在根

    的子文件夹中的应用程序
    string url = String.Format(
        Request.Url.IsDefaultPort ? "{0}://{1}{3}" : "{0}://{1}:{2}{3}",
        Request.Url.Scheme, Request.Url.Host,
        Request.Url.Port, ResolveUrl("~/"));