【问题标题】:get main part of url including virtual directory获取 url 的主要部分,包括虚拟目录
【发布时间】:2011-12-21 10:39:45
【问题描述】:

我正在使用 .net 4.0 c#。

我希望能够从当前的 http 请求中获取 url,包括任何虚拟目录。例如(请求和寻求的价值):

http://www.website.com/shop/test.aspx -> http://www.website.com/shop/

http://www.website.com/test.aspx -> http://www.website.com/

http://website.com/test.aspx -> http://website.com/

如何做到这一点?

【问题讨论】:

    标签: c# asp.net .net url request


    【解决方案1】:

    这是我用的

    HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority) + HttpContext.Current.Request.ApplicationPath;
    

    【讨论】:

    • HttpContext.Current.Request.ApplicationPath 在他们的第一个示例中不会返回 /shop/ 如果它不是应用程序的根目录。
    • 如果 'shop' 不是虚拟目录,这点很好。我想我假设它是基于业余爱好者的问题。所以问题就变成了业余爱好者是否想要应用程序根目录的完整路径(我的代码提供的内容),或者只是完整的 url 减去文件名。
    • 现在我重新阅读了这个问题,他们只是说虚拟目录,所以你的答案确实适合这个问题。
    【解决方案2】:

    Request.Url 应该包含您需要的所有内容。在这一点上,检查字符串以及您希望从中获取的内容是一个问题。我以前用过 AbsoluteUri,它可以工作。

    这个例子不是万无一失的,但你应该能够从中找出你需要什么:

    string Uri = Request.Url.AbsoluteUri;
    string Output = Uri.Substring(0, Uri.LastIndexOf('/') + 1 );
    

    【讨论】:

      【解决方案3】:

      此解决方案可行且更短:

      string url = (new Uri(Request.Url, ".")).OriginalString;
      

      【讨论】:

        【解决方案4】:

        这应该可以工作

        Request.Url.OriginalString.Substring(0, Request.Url.OriginalString.LastIndexOf(Request.FilePath.Substring(Request.FilePath.LastIndexOf("/")))) + "/"
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-11
          • 1970-01-01
          • 2015-09-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多