1

我的 .NET 应用程序的一部分需要接受输入字符串(表示 URI)并仅返回文件名(如果适用,还需要扩展名)。

现在Path.GetFileName对于大多数路径都可以做到这一点,除了以下例外:如果输入字符串是一个仅由域名(例如 example.com)和端口号(例如 10210)组成的 HTTP 路径,则GetFileName返回端口号。

用简单的英语:输入字符串是http://example.com:10210,它是一个链接到互联网广播流的 URI。当Path.GetFileName使用该值调用时,返回值为10210.

这是预期的行为吗?我不记得有任何用冒号分隔路径段的平台。返回值不应该是String.Empty吗?

编辑

看起来干净的解决方案将是 和 之间的混搭Uri.LocalPathSystem.Web.VirtualPathUtility.GetFileName但这意味着将您的项目从客户端配置文件重新定位到完整框架。

我想我会在最后一个正斜杠符号之前(包括)删除所有内容。无论如何,分隔符在我的场景中永远不会改变。这样做会给我example.com:10210作为返回值,这对我正在做的事情很有意义。

4

3 回答 3

2

查看Path class 上的文档,他们似乎并不打算将它与 http 或 ftp 或类似的东西一起使用。所有示例都围绕本地文件路径和网络共享路径。

基于来自网络的其他一些轶事信息,例如这篇关于 Path.Combine 的文章,我被引导相信您不应该将 Path 用于 HTTP。

于 2012-08-07T01:36:38.420 回答
0

我不能确定这一点。这是我的猜测。。

Path类旨在用于具有底层文件系统的路径。(您的 HTTP 请求可能不指向文件系统。它可能只是一个动态生成的资源。)

您应该使用Uri类进行 URI 解析。

于 2012-08-07T01:39:02.073 回答
0

Path.VolumeSeparatorChar(冒号)不是调用结果的一部分,Path.GetInvalidPathChars用于Path.GetFileName验证输入是否正常。不幸的是,这似乎是预期的行为。

于 2012-08-07T01:41:35.893 回答