gpt4 book ai didi

asp.net - 从 ASP.NET Web API 中的 Controller 返回二进制文件

转载 作者:行者123 更新时间:2023-12-03 04:00:18 27 4
gpt4 key购买 nike

我正在使用 ASP.NET MVC 的新 WebAPI 开发一个 Web 服务,该服务将提供二进制文件,主要是 .cab.exe 文件。

以下 Controller 方法似乎有效,这意味着它返回一个文件,但它将内容类型设置为 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"));
}

有更好的方法吗?

最佳答案

尝试使用简单的HttpResponseMessageContent 属性设置为 StreamContent :

// using System.IO;
// using System.Net.Http;
// using System.Net.Http.Headers;

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.Dispose(),因为 Web API 在处理 Controller 方法的结果以发送时仍然需要能够访问它数据返回给客户端。因此,不要使用 using (var stream = …) block 。 Web API 将为您处理流。

  • 确保流的当前位置设置为 0(即流数据的开头)。在上面的示例中,这是给定的,因为您刚刚打开了该文件。但是,在其他情况下(例如,当您第一次将一些二进制数据写入 MemoryStream 时),请确保 stream.Seek(0, SeekOrigin.Begin); 或设置stream.Position = 0;

  • 对于文件流,显式指定 FileAccess.Read权限可以帮助防止网络服务器上的访问权限问题; IIS 应用程序池帐户通常仅被授予对 wwwroot 的读取/列出/执行访问权限。

关于asp.net - 从 ASP.NET Web API 中的 Controller 返回二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9541351/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com