从基础创建Uri而不尾随斜杠和相对部分

时间:2009-10-13 06:03:58

标签: .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(baseNoSlash, relative);      // file:///c:/MyApp

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

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

即使用户指定的路径没有尾随斜杠,获得正确结果的最佳方法是什么?

2 个答案:

答案 0 :(得分:9)

这是IMO的预期。毕竟,考虑相对于

的“hello.jpg”的URI
 http://foo.com/site/index.html

这是

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

正确?

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

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

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

答案 1 :(得分:0)

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