c# - 组合 URI 和路径

标签 c# .net web-services

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

methodUri = new Uri(apiUri, method.Path)

地点:

上面语句的结果是

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

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

我期望的输出是:

"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。如果我可以选择,我会将两个答案都标记为正确。

最佳答案

不要使用 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.r-s.co.uk/eproxy.php/char/SkillIntraining.xml.aspx

关于c# - 组合 URI 和路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/679171/

相关文章:

c# - 为什么一个基本的单线程 C# 控制台应用程序需要 3 个线程?

c# - Visual Studio 2010 - C# 编辑器比 VB.NET 编辑器更麻烦

c# - DbUpdateConcurrencyException 和 DbConcurrencyException 有什么区别?

java - 如何在 https 和客户端证书请求后面生成 Web 服务代理

android - 我的 Activity 没有打印 web 服务的结果,而是只写 "TextView"

c# - WCF 客户端返回空数组 - XML 响应似乎正常

javascript - 如何将客户端数据发送到 MVC Controller 以进行登录页面?并保存到数据库?

javascript - Angularjs 与 browsersync post 方法作为选项发送

c# - 如何将带有数字的帕斯卡大小写转换为句子?

c# - 与 protobuf-net 和 C# 的接口(interface)