我正在改进一个应用程序,以使用PHP HTTP代理(用于缓存)而不是实际的API服务器。该应用程序当前通过以下代码组合服务器URI和路径:
请注意:下面的两个解决方案都可以工作,但System.UriBuilder提供了一个更健壮的机制来组合URI和路径,在我的情况下,相比使用System.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.r-s.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,它导致的资源更改较少。如果我可以选择的话,我会将两个答案都标记为正确。
UriBuilder
有一个单独的查询属性用于查询字符串,这是推荐的,因为它可以正确处理该用例的字符编码。 - Christopher Currie