我怎么可以持续获得绝对、完全合格的根本或基址的网站不论是否该网站是在虚拟目录中,并无论在哪里,我的代码是在目录中的结构?我试过每一个变量和功能我能想到的,还没有找到一个好办法。

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


这里的一些东西,我已经试过和结果。唯一一个包括整片,我想(http://localhost:4471/DNN441)是一请求。URI。AbsoluteURI:

  • 请求。PhysicalPath:C:\WebSites\DNN441\Default.aspx
  • 请求。ApplicationPath:/DNN441
  • 请求。PhysicalApplicationPath:C:\WebSites\DNN441\
  • MapPath:C:\WebSites\DNN441\DesktopModules\Articles emplates\Default.aspx
  • RawURL:/DNN441/ModuleTesting/Articles/且tabid/56/ctl/详细/中/374/ItemID/1/默认。aspx
  • 请求。网址。AbsoluteUri: http://localhost:4471/DNN441/Default.aspx
  • 请求。网址。AbsolutePath:/DNN441/默认。aspx
  • 请求。网址。LocalPath:/DNN441/默认。aspx请求。网址。主持人:"localhost"
  • 请求。网址。PathAndQuery:/DNN441/默认。aspx?且tabid=56&ctl=Details&mid=374&ItemID=1
有帮助吗?

解决方案

在读通过的答复中提供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();
}

其他提示

所接受的回答假设当前的请求时已经在服务器/虚拟根。试试这个:

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

有一些优秀的讨论和思想上 Rick Strahl的博客

编辑:我要补充的想法工作有或没有一个有效的HttpContext.

EDIT2:这里的 具体评论/代码 在这一职务,回答问题

发现 这个代码在这里:

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);

你有没有尝试过若.RootUrl这通常是配置在网络上。配置文件?

你说的是用作联系?

如果是这样,那么这样做 <a href='/'>goes to root</a> 会带你到默认文件的网的根源。

现在,对客户的侧,这样做,通过"~/"控制::ResolveUrl方法将为你提供什么你要找的。(http://msdn.microsoft.com/en-us/library/system.web.ui.control.resolveurl.aspx)

我没有办法证实这一刻但你有没有试过"请求。网址。AbsoluteUri"从另一台机器?

它发生,我就你的机器感到关切的是它的浏览器的要求从localhost。

我可能是错的但但是我认为请求是相对于浏览器以及不在的网络服务器。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top