为了账号安全,请及时绑定邮箱和手机立即绑定

从ASP.NETWebAPI中的控制器返回二进制文件

从ASP.NETWebAPI中的控制器返回二进制文件

一只甜甜圈 2019-06-20 16:34:20
从ASP.NETWebAPI中的控制器返回二进制文件我正在使用ASP.NETMVC的新WebAPI开发一个Web服务,它将提供二进制文件,主要是.cab和.exe档案。下面的控制器方法似乎有效,这意味着它返回一个文件,但它将内容类型设置为application/json:public HttpResponseMessage<Stream> Post(string version, string environment, string filetype){     var path = @"C:\Temp\test.exe";     var stream = new FileStream(path, FileMode.Open);     return new HttpResponseMessage<Stream>(stream, new MediaTypeHeaderValue("application/octet-stream"));}有更好的方法吗?
查看完整描述

3 回答

?
12345678_0001

TA贡献1802条经验 获得超5个赞

虽然建议的解决方案可以正常工作,但是还有另一种方法可以从控制器返回字节数组,并对响应流进行正确的格式化:

  • 在请求中,设置标题“Accept:application/octet-stream”。
  • 服务器端,添加媒体类型格式化程序以支持此MIME类型.

不幸的是,WebApi不包括任何用于“应用程序/八位流”的格式化程序。在GitHub上有一个实现:BinaryMediaTypeFormat(对于webapi 2,方法签名有一些小的修改以使其工作)。

可以将此格式化程序添加到全局配置中:

HttpConfiguration config;// ...config.Formatters.Add(new BinaryMediaTypeFormatter(false));

WebApi现在应该使用BinaryMediaTypeFormatter如果请求指定正确的接受标头。

我更喜欢这个解决方案,因为返回字节[]的动作控制器更适合测试。不过,如果您想返回另一个内容类型,则另一种解决方案允许您进行比“application/octet-stream”(例如“Image/gif”)更多的控制。


查看完整回答
反对 回复 2019-06-20
  • 3 回答
  • 0 关注
  • 1727 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信