12 个问题
你好,
尝试使用简单的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 将为您处理流。 - 确保流的当前位置设置为 0(即流数据的开头)。 在上面的示例中,这是给定的,因为您刚刚打开了该文件。 但是,在其他场景中(例如当您第一次将一些二进制数据写入
MemoryStream
时),请确保stream.Seek(0, SeekOrigin.Begin)
; 或设置stream.Position = 0
; - 对于文件流,显式指定“FileAccess.Read”权限可以帮助防止 Web 服务器上的访问权限问题; IIS 应用程序池帐户通常仅被授予对 wwwroot 的读取/列出/执行访问权限。
如果答案是正确的解决方案,请单击“接受答案”并请投赞成票。如果您对此答案有其他疑问,请点击“评论”。
注意:如果您想接收此线程的相关电子邮件通知,请按照我们文档中的步骤启用电子邮件通知。
最好的问候