2009-10-13 88 views
4

我遇到了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(baseNoSlash, relative);  // file:///c:/MyApp 

第一个结果是我期望的结果,即使在基路径中没有斜线。

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

即使用户指定的路径没有结尾的斜杠,实现正确结果的最好方法是什么?

回答

9

这是预计IMO。毕竟,考虑URI为 “hello.jpg” 相对于

http://foo.com/site/index.html 

这是

http://foo.com/site/hello.jpg 

吧?

现在,如果您知道知道您的用户正在输入代表目录的URI,则可以确保该字符串的末尾有斜线。如果您不知道他们是否输入目录名称,则会出现问题。如果没有人已经为你工作,只需添加一个斜杠?

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

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

+0

追加斜杠如果没有一个是我的罚款。用户可能正在使用反斜线 - 我只是不想写出你写的代码,但似乎是不可避免的。谢谢! – 2009-10-13 06:37:13

+0

顺便说一句,关于hello.jpg相对于index.html的有趣说明。我从来没有看过这个角度。 – 2009-10-13 06:40:30

0

确保第一部分有斜线(即:检查它)。