下载名称中包含“+”字符的文件

本文关键字:字符 文件 包含 下载 | 更新日期: 2023-09-27 18:34:42

我正在处理一个具有上传和下载文件功能的 C# Web 系统。其中一些文件的名称或文件夹中恰好有"+"字符。

我发现 URL 中的"+"是有问题的,因为它表示连接,加号字符应编码为 %2b。

所以我尝试设置newUrl =url.string.Replace("+", "%2b")然后执行:

System.Net.WebClient req = new System.Net.WebClient();
req.UseDefaultCredentials = true;
byte[] buffer = req.DownloadData(newUrl);

最终导致下载失败和应用程序异常消息

"远程服务器返回错误:(404( 未找到。">

此外,尝试从浏览器访问文件,作为http://repository.mysite.figure+numbers.pdf 或http://repository.mysite.figure%2bnumbers.pdf最终出现错误 404。

似乎没有出路。 查找文件"draw%2bnumbers.pdf"会失败,因为它不存在,但另一方面,"draw+numbers.pdf"也会失败,因为没有"drawnumbers.pdf"。

除了重命名存储库中的所有文件和文件夹之外,是否有解决此问题的方法?

下载名称中包含“+”字符的文件

有一个解决方案。检查此链接。

默认情况下,IIS 不允许双重转义,这会阻止 + 字符在 URL 中正确移动。

答案已更新 :

我们需要在 webconfig 的安全部分添加<requestFiltering allowDoubleEscaping="true" />并重置 IIS 一次以使其工作。这样:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <security>
      <requestFiltering allowDoubleEscaping="true" />
    </security>
  </system.webServer>
</configuration>