开发人员技术 | ASP.NET | ASP.NET API
			
			
		
				用于创建支持客户端和服务器之间基于 HTTP 的通信的 RESTful Web 服务的 ASP.NET 组件。
			
		我正在使用 ASP.NET MVC 的 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"));
}
有没有更好的方法?
你好,
尝试使用简单的HttpResponseMessage,并将其Content属性设置为 StreamContent    
代码示例:
public HttpResponseMessage Post(string version, string environment,
    string filetype)
{
    var path = @"C:\Temp\test.exe";
    HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
    var stream = new FileStream(path, FileMode.Open, FileAccess.Read);
    result.Content = new StreamContent(stream);
    result.Content.Headers.ContentType = 
        new MediaTypeHeaderValue("application/octet-stream");
    return result;
}
使用stream时需要注意以下几点:
stream.Dispose(),因为Web API 在处理控制器方法的结果以将数据发送回客户端时仍然需要能够访问它。 因此,不要使用 using (var stream = …)块。 Web API 将为您处理流。MemoryStream时),请确保stream.Seek(0, SeekOrigin.Begin); 或设置 stream.Position = 0;如果答案是正确的解决方案,请单击“接受答案”并请投赞成票。如果您对此答案有其他疑问,请点击“评论”。  
注意:如果您想接收此线程的相关电子邮件通知,请按照我们文档中的步骤启用电子邮件通知。  
最好的问候