如何获取URL路径中的子目录?

3

我正在寻找一种方法来分割URL,例如http://aaa/bbb/ccc/ddd/eee.

我怎样才能获取"ccc"呢?当然可以分割它,但这并不是有趣的。


你想匹配的是什么模式?比如说URL的第三部分? - JaredPar
使用 Uri 类:http://msdn.microsoft.com/zh-cn/library/system.uri.aspx - vulkanino
2
"string answer = "ccc"" 的最优雅的翻译是:字符串答案 =“ccc”。现在认真地说,您能否提供有关如何查找该元素以及您的URL可能具有哪些变化的更多信息? - Martin Hennings
1
为什么像字符串分割这样的事情会变得“有趣”呢?不确定是否在恶作剧,但是让简单的事情变得复杂是让同行发疯的好方法。了解一下“附带复杂性”,并注意避免。 - gordy
2
我不会称其为“优雅”,更多的是“适当”。Uri类提供了处理URI所需的足够功能。 - Cᴏʀʏ
1个回答

21
Uri myuri = new Uri("http://aaa/bbb/ccc/ddd/eee");

String str= myuri.Segments[myuri.Segments.Length-3];  

我认为这是使用C#最优雅的方法。

编辑:

实际上,你也可以使用myuri.Segments[2],它会给出相同的结果。此外,请注意,这段代码将返回"ccc/"作为结果,所以如果你想得到"ccc",那么你可以使用这个(同样优雅的)方法。

String str= myuri.Segments[myuri.Segments.Length-3].TrimEnd('/');  

+1不能更加简洁明了了……我只是不理解为什么你要从结尾开始计数,而不是直接取myuri.Segments[1] - Paolo Falabella
是的,myuri.Segments[2] 给出了相同的结果。我总是需要捕获 Uri 的最后一部分,所以这就像一个习惯 :) - Chuck Norris
如果作者真的想要 "ccc" 而不是 "ccc/",那么请在上述代码中添加 str = str.TrimEnd('/');。或者,如果您已经引用了 System.Web 程序集,您可以使用 str = VirtualPathUtility.RemoveTrailingSlash(str); - Lance U. Matthews
1
@mesiesta:你说得对,应该是Segments[2],而不是Segments[1]。浏览了MSDN文档后,我没有看到Segment[0]始终为“/”这一部分的说明。 - Paolo Falabella

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接