在asp.net中确定网站的绝对完全限定网址

时间:2008-09-23 16:00:17

标签: asp.net url uri

无论网站是否位于虚拟目录中,无论我的代码在目录结构中的哪个位置,我如何始终如一地获取网站的绝对,完全限定的根网址或基本网址?我已经尝试了所有我能想到的变量和功能,并且没有找到好的方法。

我希望能够获取当前网站的网址,即http://www.example.com,或者如果它是虚拟目录,http://www.example.com/DNN/


这是我尝试过的一些事情和结果。唯一包含我想要的整件(http://localhost:4471/DNN441)的是Request.URI.AbsoluteURI:

  • Request.PhysicalPath:C:\ WebSites \ DNN441 \ Default.aspx
  • Request.ApplicationPath:/ DNN441
  • Request.PhysicalApplicationPath:C:\ WebSites \ DNN441 \
  • 的MapPath: C:\网站已\ DNN441 \ DesktopModules \文章\模板\ Default.aspx的
  • RawURL: /DNN441/ModuleTesting/Articles/tabid/56/ctl/Det​​ails/mid/374/ItemID/1/Default.aspx
  • Request.Url.AbsoluteUri:http://localhost:4471/DNN441/Default.aspx
  • Request.Url.AbsolutePath:/DNN441/Default.aspx
  • Request.Url.LocalPath:/DNN441/Default.aspx Request.Url.Host:localhost
  • Request.Url.PathAndQuery: /DNN441/Default.aspx?TabId=56&ctl=Details&mid=374&ItemID=1

7 个答案:

答案 0 :(得分:12)

通过阅读Rick Strahl博客中提供的答案,我发现我真正需要的是非常简单的。首先,您需要确定相对路径(对我来说这是容易的部分),并将其传递到下面定义的函数中:

VB.NET

Public Shared Function GetFullyQualifiedURL(ByVal s as string) As String
   Dim Result as URI = New URI(HttpContext.Current.Request.Url, s)
   Return Result.ToString
End Function

C#

public static string GetFullyQualifiedURL(string s) {
    Uri Result = new Uri(HttpContext.Current.Request.Url, s);
    return Result.ToString();
}

答案 1 :(得分:7)

接受的答案假定当前请求已经在服务器/虚拟根目录。试试这个:

Request.Url.GetLeftPart(UriPartial.Authority) + Request.ApplicationPath

答案 2 :(得分:5)

Rick Strahl's blog

上有一些很好的讨论和想法

编辑:我应该补充说,这些想法可以使用或不使用有效的HttpContext。

EDIT2:这是该帖子中回复问题的specific comment / code

答案 3 :(得分:2)

找到this code here

string appPath = null;

appPath = string.Format("{0}://{1}{2}{3}",
    Request.Url.Scheme,
    Request.Url.Host,
    Request.Url.Port == 80 ? string.Empty : ":" + Request.Url.Port,
    Request.ApplicationPath);

答案 4 :(得分:0)

您是否尝试过通常在web.config文件中配置的AppSettings.RootUrl?

答案 5 :(得分:0)

您是否在谈论用作链接?

如果是这样,那么执行此<a href='/'>goes to root</a>会将您带到Web根目录的默认文件。

现在,对于客户端来说,将“〜/”传递给Control :: ResolveUrl方法将为您提供所需的内容。 (http://msdn.microsoft.com/en-us/library/system.web.ui.control.resolveurl.aspx

答案 6 :(得分:0)

我目前无法验证这一点,但您是否尝试过另一台机器上的“Request.Url.AbsoluteUri”?

对我来说,就你的机器而言,它的浏览器是从localhost请求。

我可能错了,但我认为请求是相对于浏览器而不是网络服务器。