【问题标题】:Determine site's absolute, fully-qualified url in asp.net在 asp.net 中确定站点的绝对、完全限定的 url
【发布时间】:2010-09-12 10:13:34
【问题描述】:

无论网站是否在虚拟目录中,也无论我的代码在目录结构中的什么位置,我如何才能始终如一地获得网站的绝对、完全限定的根 URL 或基本 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
  • Request.ApplicationPath: /DNN441
  • Request.PhysicalApplicationPath: C:\WebSites\DNN441\
  • 地图路径: C:\WebSites\DNN441\DesktopModules\Articles\Templates\Default.aspx
  • 原始网址: /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

【问题讨论】:

    标签: asp.net url uri


    【解决方案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
    【解决方案2】:

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

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

    【讨论】:

    • 有时我确实发现这是首选选项。还不足以将其更改为接受的答案,但也许及时。
    【解决方案3】:

    Rick Strahl's blog上有一些很棒的讨论和想法

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

    EDIT2:这是该帖子上回答问题的specific comment / code

    【讨论】:

    • 页面上的最后一篇文章似乎确实是我需要的答案。我还没有“接受”这个答案,因为我讨厌人们必须通读那里的所有内容才能得到最终答案......不确定我是否应该在这里重新发布最后一篇文章或者最好的解决方案是什么.
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

      • 这将用于 DotNetNuke 模块,大多数 DotNetNuke 站点没有此设置。
      【解决方案6】:

      你是说用作链接吗?

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

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

      【讨论】:

      • 不,这些都是相对链接。我需要绝对的、完全合格的根。我有多种情况需要这个,现在具体的一个是这样我可以将退货和取消网址传递给 Paypal。
      【解决方案7】:

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

      在我看来,就您的机器而言,它的浏览器正在从 localhost 请求。

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

      【讨论】:

        猜你喜欢
        • 2013-06-28
        • 1970-01-01
        • 2014-05-04
        • 2018-05-04
        • 2022-07-07
        • 1970-01-01
        • 2015-04-03
        • 2015-08-03
        • 2010-12-06
        相关资源
        最近更新 更多