8

无论站点是否在虚拟目录中,也无论我的代码在目录结构中的什么位置,我怎样才能始终如一地获得站点的绝对、完全限定的根或基本 URL?我已经尝试了所有我能想到的变量和函数,但没有找到好的方法。

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


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

  • Request.PhysicalPath: C:\WebSites\DNN441\Default.aspx
  • 请求.应用程序路径:/DNN441
  • Request.PhysicalApplicationPath: C:\WebSites\DNN441\
  • 地图路径:C:\WebSites\DNN441\DesktopModules\Articles\Templates\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
4

7 回答 7

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();
}
于 2008-10-23T20:52:03.690 回答
7

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

Request.Url.GetLeftPart(UriPartial.Authority) + Request.ApplicationPath
于 2011-08-18T18:46:31.963 回答
5

Rick Strahl 的博客上有一些很棒的讨论和想法

编辑:我应该补充一点,无论有没有有效的 HttpContext,这些想法都有效。

EDIT2:这是该帖子上回答问题的具体评论/代码

于 2008-09-23T16:01:45.507 回答
2

在这里找到这段代码

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);
于 2009-10-19T13:13:45.697 回答
0

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

于 2008-09-23T16:02:53.553 回答
0

您是在谈论用作链接吗?

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

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

于 2008-09-23T16:05:08.137 回答
0

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

我突然想到,就您的机器而言,它的浏览器正在从本地主机请求。

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

于 2008-09-23T16:45:12.423 回答