在C#中获取URL中的文件名

9

目前我们有一个解决方案,使用以下代码从URL中获取文件名:

currentFile = Path.GetFileNameWithoutExtension(url);

我们发现,如果查询字符串中包含引号等字符,会返回“路径中的非法字符”错误。
例如,如果URL为:
http:\\myurl.com\mypage.aspx?utm_content=This+Is+"Broken"

然后它就得不到文件名。有没有更好、更清晰的方法来获取“mypage”?

在调用GetFileNameWithoutExtension之前,你不能仅仅从URL中删除查询字符串吗? - G_P
检查这个链接:https://dev59.com/nW445IYBdhLWcg3w7uc0#6015377 如果它解决了你的问题,请给他投票;-) - Davide Piras
你在获取文件名之前尝试过使用Server.UrlEncode(url)吗? - A.B.Cade
可能是重复问题:https://dev59.com/HlDTa4cB1Zd3GeqPMdfe - M.Babcock
请考虑到URL不一定指向文件,以及名称中没有非法字符仍然可能是非法的文件名。 - Dour High Arch
3个回答

21

22
string filename = Path.GetFileName(new Uri(myUrlString).AbsolutePath); - jocull

3
我会先查找字符串中的?,如果存在,就去掉后面的部分,然后使用该字符串来调用GetFileNameWithoutExtension函数。
例如:
        string url;
        int index;

        index = url.IndexOf("?");
        if (index != -1)
        {
            url = url.Substring(0, index);
        }
        currentFile = Path.GetFileNameWithoutExtension(url);

这比框架已经提供的Request.Url.AbsolutePath更加复杂和冗长。 - Davide Piras
1
@DavidePiras:为什么你假设正在处理的URL是请求URL?OP在最初的问题中没有提到这一点。我提供的解决方案是对他们发布的代码的直接回应,该代码仅引用了一个URL。这个URL可能来自日志文件,可能来自引荐字符串,或者来自带有嵌入式引用的解析HTML页面。 - competent_tech

0

使用HttpContext.Current.Request.PhysicalPath而不是完整的URL作为参数传递给Path.GetFileNameWithoutExtension方法。

希望这能有所帮助,


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