我遇到了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
Run Code Online (Sandbox Code Playgroud)
第一个结果是我期望的结果,即使基本路径中没有斜线也是如此.
我的主要问题是基本路径来自用户输入.
即使用户指定的路径没有尾随斜杠,获得正确结果的最佳方法是什么?
这是IMO的预期.毕竟,考虑相对于"hello.jpg"的URI
http://foo.com/site/index.html
Run Code Online (Sandbox Code Playgroud)
它的
http://foo.com/site/hello.jpg
Run Code Online (Sandbox Code Playgroud)
对?
现在,如果您知道您的用户正在输入表示目录的URI,则可以确保该字符串的末尾有斜杠.如果您不知道他们是否输入了目录名,则会出现问题.如果没有一个已经为你工作,只会添加一个斜线?
string baseUri = new Uri(userUri + userUri.EndsWith("\\") ? "" : "\\");
Run Code Online (Sandbox Code Playgroud)
这是假设(基于你的例子)他们将使用反斜杠.根据您的确切情况,您可能还需要处理正斜杠.