如何在 ASP.NET Web API 中设置下载文件名 ?

咨询区

  • Tae-Sung Shin

在我的 ApiController 类中,有一个下载文件的Action方法,代码如下:

public HttpResponseMessage Get(int id)
{try{string dir = HttpContext.Current.Server.MapPath("~"); //location of the template fileStream file = new MemoryStream();Stream result = _service.GetMyForm(id, dir, file);if (result == null){return Request.CreateResponse(HttpStatusCode.NotFound);}result.Position = 0;HttpResponseMessage response = new HttpResponseMessage();response.StatusCode = HttpStatusCode.OK;response.Content = new StreamContent(result);return response;}catch (IOException){return Request.CreateResponse(HttpStatusCode.InternalServerError);}
}

代码运行是没有任何问题的,有一点不爽的是每次下载的文件名都是一串id,导致用户每次在对话框中保存的时候都需要修改成语义化的名字,我的想法是能不能在 API 端直接设置成默认名字呢?

回答区

  • Darin Dimitrov

这个很简单,在 HttpResponseMessage 的 header 中设置一下 Content-Disposition 即可,参考如下代码:

HttpResponseMessage response = new HttpResponseMessage();
response.StatusCode = HttpStatusCode.OK;
response.Content = new StreamContent(result);
response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
{FileName = "foo.txt"
};
  • sorenhk

只要确保你的文件名是一个正确编码的格式,而且你也不想用 WebApi 的 HttpResponseMessage 的话,推荐直接设置 Response, 参考如下代码:

Response.AddHeader("Content-Disposition", new System.Net.Mime.ContentDisposition("attachment") { FileName = "foo.txt" }.ToString());

或者这样:

Response.Headers.Add("Content-Disposition", $"attachment; filename={myFileName}");

点评区

这种需求在 webapi 开发中还是蛮容易遇到的,不管什么途径最终都是设置 Content-Disposition,学习了。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python中with as用法_python 中关于with...as的用法

python中的with...as类似于try...except......finally...其用法是with A() as b:suiteblock其中A是一个类,该类中必须包含两个函数__enter__(),和__exit__() ,b为函数__enter__()函数的返回值,当执行with A() as b: 时&#xff0…

10岁高分考上大学,16岁读博的95后神童张炘炀,活成了他想要的样子吗?

全世界只有3.14 % 的人关注了爆炸吧知识开启学神模式走上人生巅峰指日可待时间过得真快,今年的暑假没几天就要结束了,刚参加完高考的孩子也将步入大学,开启人生的新一段旅程。 说起上大学,这让超模君想起了少年天才、神童张炘炀。…

VC++ 6.0 C8051F340 USB PC侧通信 Demo

// HelloWorld.cpp : Defines the entry point for the console application. ///**************************************************************************** VC 6.0 C8051F340 USB 通信 Demo* 声明:* 1. 本程序另外需要C8051F340单片机…

Eclipse 导出

Eclipse 导出 右鍵 -> Export -> Runnable JAR file 在 library handling 的部分,可以选择自己想要的方式1. Extract required libraries into generated JAR -> 把所有的 import JAR 都拆开來,包含在 JAR 的各个目录中,ex. net…

带有控制按钮的图片滚动

上一次写了一个图片自动滚动功能,没有左右按钮控制的功能。今天花了点时间,写了一个带有左右按钮控制的图片滚动效果。所谓自动滚动,原理就是周期性的执行一个效果。在js中,通常是用setInterval这个函数来执行的,setIn…

启动ipython内核发生错误_ipython3启动

Spark的安装分为几种模式,其中一种是本地运行模式,只需要在单节点上解压即可运行,这种模式不需要依赖Hadoop 环境。 运行 spark-shell 本地模式运行spark-shell非常简单,只要运行以下命令即可,假设当前目录是$SPARK_HO…

Win11代言人官宣

微软宣布李现为中国市场的“微软零售全品牌大使”,代言全新 Windows 11、Surface 和 Microsoft 365 等产品。微软全新发布的 Windows 11 操作系统,简洁高效,带来耳目一新的视觉和使用体验全新升级的新一代 Surface Pro 8 惊艳上市&#xff0…

linux 硬盘报错日志,Linux内核I_O系统报错日志与硬盘故障对应关系

Linux 内核I/O 系统报错日志与硬盘故障对应关系Jun042011Leave a Comment Written by chen日志信息 故障现象描述与硬盘关系 scsi1: ERROR on channel 0, id 7, lun 0, CDB: Read (10) 00 73 fc 62 bf 00 00 80 00 Info fld0x73fc6326, Current sdi: sense key Medium Error Ad…

求余运算符

笔记摘自《极客学院》 求余运算(a % b)是计算b的多少倍刚刚好可以容入a,返回多出来的那部分(余数)。 注意:求余运算(%)在其他语言也叫取模运算。然而严格说来,我们看该运…

实习启航

两个月左右没有更新博客了,原因说了也白说,人是喜欢找原因的动物。这会造成很多假象,浪费很多时间,我喜欢向前看。说说近况吧。明天就要坐火车去深圳了,我从出生到现在就去过中国的3个省:武汉(出…

页面上指定类型的控件的样式添加

重构代码!由于不能用到skin所以在基类里面写了个加载样式的方法。 1 #region 初始化控件2 private void InitializeControls()3 {4 foreach (Control HtmlCon in this.Controls)5 {6 if (HtmlCon is HtmlForm)7 {8…

万箭齐发!COSCon' 21深圳分会场闪亮登场!

“ 点击蓝字 / 关注我们 ”| 作者:COSCon21 组委会| 编辑:钱奕| 设计:朱亿钦| 责编:沈于蓝01序言世界上最遥远的距离,不是生与死的距离,而是你在我对面办公楼,却不能一起嗨皮。辣么多个辗转反侧…

6部BBC “教材级” 地理纪录片,有生之年必看系列!

全世界只有3.14 % 的人关注了爆炸吧知识看BBC的纪录片,既可以追溯上下数千年的历史文化,也可以欣赏从宇宙到地心深处的奇妙境界,而及其超级精彩的画面即使定格,也是一幅摄影佳作。BBC纪录片题材广泛、制作精良,观看起来…

黑马c++32期_【每日一考】第40期:计提折旧

每天都有很多小伙伴来做会计实操每日一考实操君看到非常的欣慰,希望大家持续打卡学习请看今天的题▼▼▼单选题某企业的一辆运货卡车,其原价为600 000元,预计总行驶里程为500 000千米,预计报废时的净残值率为5%&#x…

linux挂载4t硬盘用不了,centos7挂载新加4T硬盘到/home目录

以下操作均在root环境下运行。1.查看硬盘# fdisk -l发现硬盘为/dev/sdb 大小4T2.如果此硬盘以前有过分区,则先对磁盘格式化:# mkfs -t ext4 /dev/sdb此命令会对整个磁盘格式化3.对新磁盘进行分区,由于fdisk仅支持2T以内磁盘分区,但…

8606 二叉树遍历的建设和运营

8606 二叉树遍历的建设和运营时限:1000MS 内存限制:1000K问题: 编程题 语言: 无限叙述性说明用二进制表示的名单二叉树结构:按第一个二进制序列,以便输入节点值(一个字符),#字符表示空树。构造二叉链表表示的二叉树…

XML的BOM

最近做一个XML的生成与导入功能,生成的XML经过语法验证和Schema验证,均无错误,编码方式也是所要求UTF-8,可是导入时却一直提示: Error on line 1 of document : Content is not allowed in prolog. Nested exception:…

关于C#中实现两个应用程序消息通讯的问题

最近项目中需要在两个应用程序之间通讯,这里的两个程序是在一台机器上,看了csdn上的一篇文章《如何在C#用WM_COPYDATA消息来实现两个进程之间传递数据》,原理是讲清楚了,但使起来很不爽,决定自己封装一下,满…

C#提升性能的几点提示和技巧

C#性能提示和技巧在Raygun[1],我们是一群非常懂多种语言的开发人员。Raygun的各个部分使用不同的语言和框架编写-最好的工作方式。鉴于大量的C#和我们正在处理的数据的爆炸性增长,在不同的时间需要进行一些优化工作。大部分重大的…

电脑睡眠快捷键_电脑快速进入睡眠的快捷键是什么?

电脑快速进入睡眠的快捷键是什么?正常情况下需要点击电源再按睡眠,小编觉得有点麻烦,如果你想要进入睡眠状态能够像锁屏快捷键那样就好了,那么今天就教大家如何设置睡眠快捷键,让你的电脑快速进入睡眠状态。我们知道电…