.net 从基创建Uri,不带尾随斜杠和相对部分

.net 从基创建Uri,不带尾随斜杠和相对部分,.net,uri,.net,Uri,我对Uri构造函数有问题。基本路径是否以斜杠结束,结果会有所不同 var baseWithSlash = new Uri("c:\\Temp\\"); var baseNoSlash = new Uri("c:\\Temp"); var relative = "MyApp"; var pathWithSlash = new Uri(baseWithSlash, relative); // file:///c:/Temp/MyApp var pathNoSlash = new Uri(bas

我对Uri构造函数有问题。基本路径是否以斜杠结束,结果会有所不同

var baseWithSlash = new Uri("c:\\Temp\\");
var baseNoSlash = new Uri("c:\\Temp");

var relative = "MyApp";

var pathWithSlash = new Uri(baseWithSlash, relative);  // file:///c:/Temp/MyApp
var pathNoSlash = new Uri(baseNoSlash, relative);      // file:///c:/MyApp
第一个结果是我期望的结果,即使基本路径中没有斜杠

我的主要问题是基本路径来自用户输入


即使用户指定不带斜杠的路径,最好的方法是什么?

< P>确保第一部分有尾部斜杠(即:检查它)。
 http://foo.com/site/index.html
它是

对吧?

现在,如果您知道用户正在输入一个表示目录的URI,那么可以确保字符串的末尾有一个斜杠。如果您不知道他们是否正在输入目录名,则会出现问题。如果还没有斜杠的话,就加上斜杠行吗

string baseUri = new Uri(userUri + userUri.EndsWith("\\") ? "" : "\\");

这是假设(基于您的示例),他们将使用反斜杠。根据您的具体情况,您可能还需要处理正斜杠。

如果还没有斜杠,我可以附加斜杠。用户可能正在使用前斜杠和后斜杠-我只是不想编写您编写的代码,但这似乎是不可避免的。谢谢顺便说一句,关于hello.jpg相对于index.html的有趣说明。我从来没有从这个角度看过。
string baseUri = new Uri(userUri + userUri.EndsWith("\\") ? "" : "\\");