2016-05-16 41 views
2

我试图运行这个命令:如何阻止Uri root被更改?

string webRoot = "http://www.dev/api"; 
string apiRoot = "http://api.dev"; 
string path = "/verify"; 
Uri root = (Settings.IsWebRoot) ? new Uri(webRoot) : new Uri(apiRoot); 
Uri actualUri = new Uri(root, path); 

然而,actualUrihttp://www.dev/api/verify(这是我期待什么),但http://www.dev/verify

我在做什么错?

回答

2

如果你想多一点灵活的选择,你可以使用UriBuilder

string webRoot = "http://www.dev/api"; 
string apiRoot = "http://api.dev"; 
string path = "/verify"; 
Uri root = (true) ? new Uri(webRoot) : new Uri(apiRoot); 

UriBuilder builder = new UriBuilder(root); 
builder.Path += path; 

Uri actualUri = builder.Uri; 
+0

我还需要省略起始斜杠(所以它是相对的,不是绝对的)如果我使用UriBuilder? –

+0

@PiersKarsenbarg不在这种情况下。 –

+0

请注意,如果webRoot和path都以*斜杠结尾 - 它会给出错误的结果,所以仍然有一些玩弄斜线。 – Evk

2

这不是很直观,但你需要:

  1. 结束您webRoot以斜杠。
  2. 不是用斜杠开始path(否则它会认为它是绝对的,而不是相对的)。

所以下面将正常工作:

string webRoot = "http://www.dev/api/"; 
string apiRoot = "http://api.dev/"; 
string path = "verify/"; 
Uri root = (true) ? new Uri(webRoot) : new Uri(apiRoot); 
Uri actualUri = new Uri(root, path);