.NetCore中下载文件接口指定文件名时中文被替换为下划线(_)的问题

news/2024/10/9 20:18:54

  首先,我这里使用的.net6

  比如我有这样一个接口:

    public async Task<IActionResult> Download(string name){//省略业务代码...return File(stream, "application/octet-stream", name);}

  这里下载的文件名时接口参数传进来的,然后我们调用接口,发现当我传的是文件名中包含中文时,会被替换为下划线(_):

  

  其实,查看源码,发现这是有意为之。

  在ContentDispositionHeaderValue 中,有如下代码处理(这里)

    // Replaces characters not suitable for HTTP headers with '_' rather than MIME encoding them.private StringSegment Sanitize(StringSegment input){var result = input;if (RequiresEncoding(result)){var builder = new StringBuilder(result.Length);for (int i = 0; i < result.Length; i++){var c = result[i];if ((int)c > 0x7f || (int)c < 0x20){c = '_'; // Replace out-of-range characters}builder.Append(c);}result = builder.ToString();}return result;}

  这段代码其实就是要求文件名是ASCII编码中的33到126部分,就是一些常用的字符,否则使用下划线代替,也就是说不只是中文,包括空格等其它的一些字符也会被替换。

  那怎么处理这个问题呢?很简单,UrlEncode 处理一下就好了:

    public async Task<IActionResult> Download(string name){//省略业务代码...name = HttpUtility.UrlEncode(name);return File(stream, "application/octet-stream", name);}

  

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/69541.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

多校 A 层冲刺 NOIP2024 模拟赛 04

难度 ★★☆☆☆多校A层冲刺NOIP2024模拟赛04 T 02表示法 签到题 记得有一道普及题是没加高精的原吧... 将原数高精除变为二进制,然后记搜就好了。 T 子串的子串 签到题 注意到 \(n\) 很小支持 \(O(n^2)\) 的操作,可以直接预处理出所有 \(l,r\) 的个数,预处理方式可参考数颜…

小白科普:AI 到底是什么,终于有人讲清楚了

本小册主要是针对 AI 初学者的小白用户,那么第一篇肯定就是给大家科普一下,到底什么是 AI 呢?本小册主要是针对 AI 初学者的小白用户,那么第一篇肯定就是给大家科普一下,到底什么是 AI 呢? AI 是“人工智能”的缩写,它听起来好像很复杂,但其实它就像一个超级聪明的机器…

实验1 现代C++编程初体验

1. 实验任务11 #include <iostream>2 #include <string>3 #include <vector>4 #include <algorithm>5 6 using namespace std;7 8 // 声明9 // 模板函数声明 10 template<typename T> 11 void output(const T& c); 12 13 // 普通函数声明 1…

关于C++中的异常概念理解

1. 基本概念 异常,即 exception,是C++中的基本概念之一,在某段程序发生无法继续正常执行的情况时,C++允许程序进行所谓抛出异常(有时也被称为吐出异常)的行为,这些被抛出的异常,会自动地从触发点开始向外传播,直到被捕获(有时也被称为吞下异常)或者程序终止。2. 语法…

基于FPGA的8PSK调制解调系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR

1.算法仿真效果本系统在以前写过的8PSK调制解调系统的基础上,增加了高斯信道模块,误码率统计模块,可以验证不同SNR情况下的8PSK误码情况。VIVADO2019.2仿真结果如下(完整代码运行后无水印):设置SNR=30db其对应星座图:设置SNR=15db其对应星座图:设置SNR=10db其对应星座图…

java学习10.9

网上找的javaweb教程 Servlet+Mybatis+Thymeleaf的javaweb图书管理系统 实现用web界面对数据库的增删改查 前端页面css样式为现成的东西修改 项目架构整体页面

『模拟赛』多校A层冲刺NOIP2024模拟赛04

『模拟赛记录』多校A层冲刺NOIP2024模拟赛04Rank 赤石场。A. 02表示法 签。 若干天前在洛谷随到过,不过当时只看了眼讨论区就走了www 还好本来不是很难。 发现大体上是一个拆分二的幂的问题,从大到小枚举 2 的幂,判断有没有这个幂只用比较大小关系,然后再对指数做一个同样的…