我的.NET应用程序的一部分需要获取输入字符串(表示URI)并仅返回文件名(如果适用,则返回扩展名)。
现在Path.GetFileName
对大多数路径完全正常,但有以下异常:如果输入字符串是仅包含域名(例如example.com)和端口号(例如10210)的HTTP路径,GetFileName
返回端口号。
简单英语:输入字符串是http://example.com:10210
,它是一个链接到互联网广播流的URI。
使用该值调用Path.GetFileName
时,返回值为10210
。
这是预期的行为吗?我不记得任何用冒号分隔路径段的平台。返回值不应该是String.Empty
吗?
修改
似乎干净的解决方案是Uri.LocalPath
和System.Web.VirtualPathUtility.GetFileName
之间的混搭,但这意味着将项目从客户端配置文件重新定位到完整框架。
我想我会在去除(包括)最后一个正斜杠符号之前删除所有内容。无论如何,分隔符在我的场景中永远不会改变这样做会给我example.com:10210
作为返回值,这对我正在做的事情有意义。
答案 0 :(得分:2)
查看docs on the Path class,看起来他们并不打算将它与http或ftp或类似的东西一起使用。所有示例都围绕本地文件路径和网络共享路径。
根据网络上的其他一些轶事信息such as this article about Path.Combine,我认为你不应该使用Path for HTTP。
答案 1 :(得分:0)
我无法确定这一点。这是我的猜测..
Path
类旨在用于具有基础文件系统的路径。 (您的HTTP请求可能不指向文件系统。它可能只是一个动态生成的资源。)
您应该使用Uri
类进行URI解析。
答案 2 :(得分:0)
Path.VolumeSeparatorChar
(冒号)不是调用Path.GetInvalidPathChars
的结果的一部分,Path.GetFileName
用来验证输入是正常的。不幸的是,这似乎是预期的行为。