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

从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"));}

有更好的方法吗?


一只甜甜圈
浏览 1728回答 3
3回答

12345678_0001

虽然建议的解决方案可以正常工作,但是还有另一种方法可以从控制器返回字节数组,并对响应流进行正确的格式化:在请求中,设置标题“Accept:application/octet-stream”。服务器端,添加媒体类型格式化程序以支持此MIME类型.不幸的是,WebApi不包括任何用于“应用程序/八位流”的格式化程序。在GitHub上有一个实现:BinaryMediaTypeFormat(对于webapi 2,方法签名有一些小的修改以使其工作)。可以将此格式化程序添加到全局配置中:HttpConfiguration&nbsp;config;//&nbsp;...config.Formatters.Add(new&nbsp;BinaryMediaTypeFormatter(false));WebApi现在应该使用BinaryMediaTypeFormatter如果请求指定正确的接受标头。我更喜欢这个解决方案,因为返回字节[]的动作控制器更适合测试。不过,如果您想返回另一个内容类型,则另一种解决方案允许您进行比“application/octet-stream”(例如“Image/gif”)更多的控制。
打开App,查看更多内容
随时随地看视频慕课网APP