![]() |
1
1322
这里有一个例子:
编者注:注意,此方法不能按预期工作。在某些情况下,它可以切割baseUri的一部分。查看评论和其他答案。 |
![]() |
2
220
这可能是一个适当简单的解决方案:
|
![]() |
3
181
这里已经有了一些很好的答案。基于mdsharp的建议,这里有一个扩展方法,当你想处理Uri实例时可以很容易地使用:
使用示例:
这将产生 http://example.com/subpath/part1/part2 如果你想使用字符串而不是Uris,那么以下操作也会产生相同的结果,只需对其进行调整以满足你的需求:
|
![]() |
4
156
你使用
将返回:
|
![]() |
5
135
那里
is a Todd Menier's comment above
那
Flurl
包括a
更多详情:
得到 Flurl.Http on NuGet : PM>安装包装水槽。Http 或 get the stand-alone URL builder 没有HTTP功能: PM>安装软件包Flurl |
![]() |
6
111
Ryan Cook的回答与我所追求的很接近,可能更适合其他开发人员。但是,它会在字符串的开头添加http://,通常它会比我想要的做更多的格式化。 此外,对于我的用例,解析相对路径并不重要。 mdsharp的答案也包含了一个好主意的种子,尽管实际的实现需要更多的细节才能完成。这是一种充实它的尝试(我在生产中使用了这个): C
VB.NET语言
此代码通过了以下测试,该测试恰好在VB中:
|
![]() |
7
48
路径。Combine对我不起作用,因为QueryString参数中可能有像“|”这样的字符,因此URL也可能有,这将导致ArgumentException。
我第一次尝试新的
将导致Special:SpecialPages,因为结肠后
因此,我最终不得不采用mdsharp/Brian MacKay的方法,并对其进行了进一步的开发,以处理多个URI部分:
用途:
|
![]() |
8
35
根据样品 URL 如果你提供了,我假设你想组合与你的网站相关的网址。 基于这一假设,我将提出这个解决方案,作为对您问题的最恰当回应:“Path.Combine很方便,有没有 相似函数 在URL框架中?" 既然有 相似函数 在URL框架中,我建议正确的方法是:“VirtualPathUtility.Combine”方法。 以下是MSDN参考链接: VirtualPathUtility.Combine Method
有一个警告:我认为这只适用于与您的网站相关的URL(也就是说,您不能使用它来生成指向另一个网站的链接。例如,
|
![]() |
9
27
|
![]() |
10
18
我刚刚整理了一个小的扩展方法:
它可以这样使用:
|
![]() |
11
16
将它们组合起来并确保其始终正确的一种简单方法是:
|
![]() |
12
13
巧妙的例子,Ryan,以函数的链接结束。做得好。 Brian的一个建议是:如果你把这段代码包装在一个函数中,你可能想在TryCreate调用之前使用UriBuilder包装基本URL。 否则,基本URL必须包含方案(其中UriBuilder将假定为http://)。只是一个想法:
|
![]() |
13
13
我认为这应该给你更大的灵活性,因为你可以处理任意多的路径段:
|
![]() |
14
10
组合URL的多个部分可能有点棘手。您可以使用双参数构造函数
在任何一种情况下,您最终都可能返回不正确的结果,因为这些方法不断截断第一个参数的相关部分
为了能够将多个部分组合成一个最终的URL,您可以复制以下两个函数:
可以在以下网址找到带有单元测试的完整代码,以演示使用方法 https://uricombine.codeplex.com/SourceControl/latest#UriCombine/Uri.cs 我有单元测试来涵盖三种最常见的情况:
|
![]() |
15
10
我发现了
看见 UriBuilder Class - MSDN 了解更多构造函数和文档。 |
![]() |
16
10
正如在其他答案中发现的那样,要么是新的
我认为这最好作为一种扩展方法来实现,即。
并使用它:
在性能方面,这消耗了比所需更多的资源,因为Uri类做了大量的解析和验证;一个非常粗略的分析(Debug)在大约2秒内完成了一百万次操作。 这适用于大多数场景,但是为了更高效,最好将所有内容都作为字符串进行操作,这需要125毫秒才能完成100万次操作。 也就是
如果你仍然想返回一个URI,那么100万次操作大约需要600毫秒。
我希望这能有所帮助。 |
![]() |
17
6
所以我有另一种方法,类似于所有使用UriBuilder的人。 我不想拆分我的BaseUrl(它可以包含路径的一部分,例如。 http://mybaseurl.com/dev/ )as javajavajavajavajava 做。 以下代码片段显示了代码+测试。
小心:
此解决方案降低了主机的级别并附加了一个端口。如果不希望这样,可以通过例如利用
经过测试。NET Core 2.1在Windows 10上的运行。 为什么这行得通?
虽然
取自
https://github.com/dotnet/corefx/blob/master/src/System.Private.Uri/src/System/UriBuilder.cs
(注意电话
这是最好的方法吗? 当然,这个解决方案是相当自我描述的(至少在我看来)。但你依赖的是未记录的(至少我通过快速谷歌搜索没有发现任何东西)“功能”。NET API。这可能会随着未来的版本而改变,因此请涵盖测试方法。
有测试
https://github.com/dotnet/corefx/blob/master/src/System.Private.Uri/tests/FunctionalTests/UriBuilderTests.cs
(
旁注:
一个人也可以和
|
![]() |
18
6
对于那些正在寻找单行线并且只想连接路径的一部分而不创建新方法或引用新库或构造URI值并将其转换为字符串的人来说,那么。..
这很基本,但我看不出你还需要什么。如果你害怕加倍的“/”,那么你可以简单地做一个
这里有很多答案可以处理上述所有问题,但就我而言,我只需要在一个地方使用一次,不需要严重依赖它。此外,很容易看出这里发生了什么。 请参阅: https://learn.microsoft.com/en-us/dotnet/api/system.string.join?view=netframework-4.8 |
|
19
6
如果你不想有像Flurl这样的依赖关系,你可以使用它的源代码:
|
![]() |
20
5
我发现以下内容很有用,并具有以下功能:
班
测验
|
![]() |
21
5
我有一个无分配的字符串创建版本,我一直在使用它并取得了巨大的成功。 注:
希望你觉得这有用!
使用Benchmark DotNet输出:
|
![]() |
22
4
我的通用解决方案:
|
![]() |
23
4
这是微软的(OfficeDevPnP)方法 UrlUtility.Combine :
来源: GitHub |
![]() |
24
4
如果您不想添加第三方依赖项(如Flurl)或创建自定义扩展方法,请在ASP中。NET Core(也可在Microsoft.Owin中使用),您可以使用
在这种情况下,它将是:
这为您提供了所有组成部分,而无需在基本URL中指定分隔符。不幸的是,
|
![]() |
25
4
//阅读上述所有示例,结果创造了我自己:
//用法
|
![]() |
26
3
简单的一句话:
灵感来自@Matt Sharpe的回答。 |
![]() |
27
3
这是我的方法,我也会把它用于自己:
|
![]() |
28
3
我创建了这个功能,可以让你的生活更轻松:
它适用于URL和普通路径。 用途:
|
![]() |
29
3
我发现
|
![]() |
30
3
为什么不直接使用以下内容。
|