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

Kon*_*rin 4 .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
Run Code Online (Sandbox Code Playgroud)

第一个结果是我期望的结果,即使基本路径中没有斜线也是如此.

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

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

Jon*_*eet 9

这是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)

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