确定地点';asp.net中的绝对、完全限定url

确定地点';asp.net中的绝对、完全限定url,asp.net,url,uri,Asp.net,Url,Uri,无论站点是否位于虚拟目录中,也不管我的代码在目录结构中的什么位置,我如何始终获得站点的绝对、完全限定的根url或基本url?我尝试了我能想到的每一个变量和函数,但没有找到一个好方法 我希望能够获取当前站点的url,即,如果是虚拟目录 以下是我尝试过的一些方法和结果。唯一包含我想要()的全部内容的是Request.URI.AbsoluteURI: Request.PhysicalPath:C:\WebSites\DNN441\Default.aspx Request.ApplicationPa

无论站点是否位于虚拟目录中,也不管我的代码在目录结构中的什么位置,我如何始终获得站点的绝对、完全限定的根url或基本url?我尝试了我能想到的每一个变量和函数,但没有找到一个好方法

我希望能够获取当前站点的url,即,如果是虚拟目录


以下是我尝试过的一些方法和结果。唯一包含我想要()的全部内容的是Request.URI.AbsoluteURI:

  • Request.PhysicalPath:C:\WebSites\DNN441\Default.aspx
  • Request.ApplicationPath:/DNN441
  • Request.PhysicalApplication路径:C:\WebSites\DNN441\
  • 映射路径: C:\WebSites\DNN441\DesktopModules\Articles\Templates\Default.aspx
  • RawURL: /DNN441/ModuleTesting/Articles/tabid/56/ctl/Details/mid/374/ItemID/1/Default.aspx
  • Request.Url.AbsoluteUri:
  • 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

有一些关于

编辑:我应该补充一点,这些想法在有或没有有效的HttpContext的情况下都可以工作


EDIT2:这篇文章回答了这个问题

你有没有尝试过通常在web.config文件中配置的AppSettings.RootUrl?

你说的是用作链接的

如果是这样,那么执行此操作将带您进入web根目录的默认文件


现在,对于客户端,将“~/”传递给Control::ResolveUrl方法将为您提供所需的内容。()

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

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


虽然我可能错了,但我认为请求与浏览器相关,而不是与Web服务器相关。

在阅读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#

发现:


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

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

这将用于DotNetNuke模块,大多数DotNetNuke站点没有此设置。不,这两个都是相对链接。我需要绝对的,完全合格的根。我有各种各样的情况下,我需要这个,具体的一个现在是这样,我可以通过返回和取消的网址贝宝。页面上的最后一篇文章似乎是我需要的答案。我还没有“接受”这个答案,因为我讨厌人们为了得到最终的答案而必须通读那里的所有东西。。。我不确定我是否应该在这里转发最后一篇文章,或者最好的解决方案是什么。我认为只有当你当前的请求已经在根目录下时,这才有效。否则,它是相对于当前请求的dir,而不是服务器应用程序路径根。我在以下方面取得了成功:Request.Url.GetLeftPart(UriPartial.Authority)+Request.applicationPath有时我发现这是首选选项。还不足以将其更改为公认的答案,但可能会及时。
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);
Request.Url.GetLeftPart(UriPartial.Authority) + Request.ApplicationPath