咨询区

  • 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,学习了。

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

  1. 【ASP.NET Web API教程】5.5 ASP.NET Web API中的HTTP Cookie

    5.5 HTTP Cookies in ASP.NET Web API 5.5 ASP.NET Web API中的HTTP Cookie 本文引自:http://www.asp.net/web-api ...

  2. (四)Asp.net web api中的坑-【api的返回值】

    (四)Asp.net web api中的坑-[api的返回值] 原文:(四)Asp.net web api中的坑-[api的返回值] void无返回值 IHttpActionResult HttpRe ...

  3. ASP.NET Web API中的Controller

    虽然通过Visual Studio向导在ASP.NET Web API项目中创建的 Controller类型默认派生与抽象类型ApiController,但是ASP.NET Web API框架本身只要 ...

  4. ASP.NET Web API中实现版本

    一般来说,api 接口是提供给其他系统或是其他公司使用,不能随意频繁的变更.然而,需求和业务不断变化,接口和参数也会发生相应的变化.如果直接对原来的接口进行修改,势必会影响线其他系统的正常运行.这就必 ...

  5. 监控系统简介(二):使用 App Metrics 在 ASP.NET Web API 中记录指标

    回顾 在<监控系统简介:使用 Prometheus 与 Grafana>一文中,我们了解了什么是监控系统,Prometheus 这一监控工具及它提供的数据类型.PromQL 以及 Graf ...

  6. go语言 echo框架_如何在Go Echo Web框架中设置嵌套HTML模板

    go语言 echo框架 by Ying Kit Yuen 英杰苑 如何在Go Echo Web框架中设置嵌套HTML模板 (How to setup a nested HTML template in ...

  7. ASP.NET Web API中实现版本的几种方式

    在ASP.NET Web API中,当我们的API发生改变,就涉及到版本问题了.如何实现API的版本呢? 1.通过路由设置版本 最简单的一种方式是通过路由设置,不同的路由,不同的版本,不同的contr ...

  8. ASP.NET Web API中的参数绑定总结

    ASP.NET Web API中的action参数类型可以分为简单类型和复杂类型. HttpResponseMessage Put(int id, Product item) id是int类型,是简单 ...

  9. 利用查询条件对象,在Asp.net Web API中实现对业务数据的分页查询处理

    在Asp.net Web API中,对业务数据的分页查询处理是一个非常常见的接口,我们需要在查询条件对象中,定义好相应业务的查询参数,排序信息,请求记录数和每页大小信息等内容,根据这些查询信息,我们在 ...

最新文章

  1. 您也使用托管C++吗?
  2. 关闭Delphi的RTTI
  3. 常见的水平居中布局方式
  4. 单例设计模式singleton
  5. ORM多表查询——关联查询
  6. SAP CRM中间件Object出现wait状态的原因调试
  7. 如何使能linux vivid
  8. 合并bin文件-----带boot发布版本比较好用的bat(便捷版)
  9. 7种有害的IT团队行为,不根除就坏大事了
  10. Python装饰器详解,详细介绍它的应用场景
  11. Linux学习总结(53)——后台启动nohup /dev/null 21 使用总结
  12. javase基础复习攻略《六》
  13. 使窗口(和 MDI 子窗口)的关闭按钮变灰的方法 - 回复 梦想成真
  14. 基于Yolov5目标检测的物体分类识别及定位(一) -- 数据集原图获取与标注
  15. DataGame: IKCEST 2019
  16. c226打印机驱动安装_打印机驱动怎么安装?
  17. 通达oa SQL注入day
  18. 利用vbs脚本实现自动发送微信消息
  19. 农业大省吉林谋乡村全面振兴:农业强、农村美、农民富
  20. c语言settextstyle有哪些字体,settextstyle() 设置文本型式函数

热门文章

  1. 单IP无TMG拓扑Lync Server 2013:前端服务器
  2. 【转】服务器维护工程师悲惨的一个星期
  3. Mock2 moco框架的http协议get方法Mock的实现
  4. (转)学习密度与专注力
  5. windows 系统监视器_使用Windows 7中的可靠性监视器对计算机问题进行故障排除
  6. 如何在Android主屏幕上添加热点快捷方式
  7. esxi.主机配置上联端口_为什么现代的电脑机箱仍然具有USB 2.0端口?
  8. java部分服务出现异常_Java web service 异常
  9. 8支团队正在努力构建下一代Ethereum
  10. Golang并发模型:合理退出并发协程