【问题标题】:General solution for relative ~path to absolute url?相对〜绝对url的相对路径的一般解决方案?
【发布时间】:2015-04-14 09:47:08
【问题描述】:

我有一个来自某个请求的 Uri 实例。 我有 "~/Pages/SomePage.aspx".

var uri = new Uri("http://www.contoso.com/");
var relativeUrl = "~/Pages/SomePage.aspx";

如何轻松地将两者结合起来?

你可能会问,上下文是什么?这是一个控制台应用程序,其中 Uri 和波浪号相对路径是手动构建的(这实际上是一个谎言,以获得“通用解决方案”,而不是 Page.Resolve 等)。

我尝试了一些方法(IE:HttpStyleUriParser),但没有得到正确的结果。而且我不想String.Format("{0}://{1}{2}{3}")我去那里。

【问题讨论】:

  • 它实际上是一个托管 WCF 的 .net 应用程序,但请考虑一下我没有告诉你。
  • 我想要一个通用的解决方案,只要你能得到一个 Uri 实例和你需要解决的相对路径,它就可以在任何地方工作。使用 .Net 框架的最佳扩展而不是简单的 String.Format("{0}://{1}{2}" , uri.Scheme , uri.Authority , relativeUrl.TrimStart('~') ); PS:对不起,我之前说过这是一个 MVC(我的错)。

标签: c# uri


【解决方案1】:

波浪字符~在*nix 系统中用于home directory of currect user

在 .Net/C#/Windows 应用程序中,您必须将其替换为当前用户的主目录。

【讨论】:

    【解决方案2】:

    这对我有用:

    static class Program
    {
        static void Main(string[] args)
        {
    
            var uri = new Uri("http://www.contoso.com/");
            var relativeUrl = new Uri("~/Pages/SomePage.aspx".Replace("~",string.Empty),UriKind.Relative);
            Uri result;
            bool success = Uri.TryCreate(uri, relativeUrl,out result);
    
            Console.WriteLine(success);
            Console.WriteLine(result.ToString());
        }
    
    }
    

    输出:

    是的

    http://www.contoso.com/Pages/SomePage.aspx

    【讨论】:

      猜你喜欢
      • 2010-10-03
      • 2013-01-24
      • 2012-02-03
      • 1970-01-01
      • 2011-06-30
      • 1970-01-01
      • 2017-04-19
      • 1970-01-01
      相关资源
      最近更新 更多