当前位置:  开发笔记 > 编程语言 > 正文

结合URI和路径

如何解决《结合URI和路径》经验,为你挑选了2个好方法。

我正在改造应用程序以使用PHP HTTP代理(用于缓存)而不是实际的API服务器,应用程序当前将服务器URI和路径与代码组合在一起:

methodUri = new Uri(apiUri, method.Path)

哪里:

apiUri =" http://api.eve-online.com/ "(System.Uri对象)

method.Path = "/char/SkillIntraining.xml.aspx"(字符串)

上述陈述的结果是

"http://api.eve-online.com/char/SkillIntraining.xml.aspx" (System.Uri Object)

要使用PHP HTTP代理,必须按如下方式更改请求

apiUri =" http://www.rs.co.uk/eproxy.php "(System.Uri对象)

method.Path = "/char/SkillIntraining.xml.aspx"(字符串)

我期待的输出是:

"http://www.r-s.co.uk/eproxy.php/char/SkillIntraining.xml.aspx" (System.Uri Object)

但是我得到的输出是:

"http://www.r-s.co.uk/char/SkillIntraining.xml.aspx" (System.Uri Object)

我知道这是构造函数Uri(Uri,string)的正确功能,我的问题是什么是更好的函数或构造函数来使用它来获得我期望的输出?我已经尝试删除method.Path中的前导"/",将其从绝对路径转移到相对路径但是没有帮助.

注意:下面的两个解决方案都可以工作,但是System.UriBuilder提供了一个更强大的机制来组合URI和路径,在我的情况下,与使用System.Uri相比,对资源的更改更少.如果我选择我会将两个答案标记为正确.



1> blowdart..:

不要使用Uri对象,使用UriBuilder - 它可以更好地处理丢失的斜杠

所以

Uri apiUri = new Uri("http://www.r-s.co.uk/eproxy.php");
string methodPath = "/char/SkillIntraining.xml.aspx";

System.UriBuilder uriBuilder = new System.UriBuilder(apiUri);
uriBuilder.Path += methodPath;

Console.WriteLine(uriBuilder.Uri.ToString());

按预期工作并生成http://www.rs.co.uk/eproxy.php/char/SkillIntraining.xml.aspx


注意路径将是URL编码的,所以如果添加包含一个查询字符串?和&字符将被编码.这是所描述的该方法的弱点.

2> Jim Mischel..:

在apiUri中添加一个尾随的"/",并从method.Path中删除前导"/":

Uri apiUri = new Uri("http://www.r-s.co.uk/eproxy.php/");
string path = "char/SkillIntraining.xml.aspx";
Uri uri = new Uri(apiUri, path);
Console.WriteLine(uri.ToString());


是不是有一个工具,可以解决从一方或另一方添加和减去"/"的问题?
推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有