我有以下代码来连接一些URI:
public static Uri BuildUri()
{
Uri baseUri = new Uri("http://192.168.1.60:8080");
Uri restUri = new Uri(baseUri, "/rest/api/2");
Uri url = new Uri(restUri, "/mypreferences?key=my.config.value");
return url;
}
我希望结果URI中有以下地址:
http://192.168.1.60:8080/rest/api/2/mypreferences?key=my.config.value
但我得到了:
http://192.168.1.60:8080/mypreferences?key=my.config.value
请有人解释原因吗?
答案 0 :(得分:2)
试试这个,即你需要更改最后一个网址。您正在传递baseUri
但是您应该通过restUri
:
Uri baseUri = new Uri("http://192.168.1.60:8080");
Uri restUri = new Uri(baseUri, "/rest/api/2/");
Uri url = new Uri(restUri, "mypreferences?key=my.config.value");
^^^^^^---Here
答案 1 :(得分:2)
void Main()
{
Uri baseUri = new Uri("http://192.168.1.60:8080");
Uri restUri = new Uri(baseUri, "/rest/api/2/");
Uri url = new Uri(restUri, "mypreferences?key=my.config.value");
Console.WriteLine (url);
}
这正确打印
http://192.168.1.60:8080/rest/api/2/mypreferences?key=my.config.value
差别必须是因为它如何解释不同URI中的正斜杠。在我尚未找到的文档中提到了这一点,但至少你已经有了解决方案。
答案 2 :(得分:1)
您在创建restUri和url时都使用baseUri。你可能打算这样做:
public static Uri BuildUri()
{
Uri baseUri = new Uri("http://192.168.1.60:8080");
Uri restUri = new Uri(baseUri, "rest/api/2");
Uri url = new Uri(restUri, "mypreferences?key=my.config.value");
return url;
}
使用baseUri创建restUri并使用restUri创建最终的url。还要注意我是如何省略子网址中的主斜杠的。 Uri类将为您处理正确的连接。
答案 3 :(得分:1)
相关:Appending multiple segments with System.Uri
您希望在路径的末尾添加/,并将其从第一个路径中删除。
Uri baseUri = new Uri( "http://192.168.1.60:8080" );
Uri restUri = new Uri(baseUri, "/rest/api/2/");