Nat*_*ous 2 c# asp.net-web-api
我想调用一个 Web api 方法并让它允许用户下载我在内存中创建的 zip 文件。我也想在内存中创建条目。
我无法让服务器正确输出下载。
这是我的网络 API 方法:
[HttpGet]
[Route("api/downloadstaffdata")]
public HttpResponseMessage DownloadStaffData()
{
var response = new HttpResponseMessage(HttpStatusCode.OK);
using (var stream = new MemoryStream())
{
using (var archive = new ZipArchive(stream, ZipArchiveMode.Create, true))
{
//future for loop to create entries in memory from staff list
var entry = archive.CreateEntry("bob.txt");
using (var writer = new StreamWriter(entry.Open()))
{
writer.WriteLine("Info for: Bob");
}
//future add staff images as well
}
stream.Seek(0, SeekOrigin.Begin);
response.Content = new StreamContent(stream);
}
response.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment")
{
FileName = "staff_1234_1.zip"
};
response.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/zip");
return response;
}
Run Code Online (Sandbox Code Playgroud)
这是我的调用js代码:
window.open('api/downloadstaffdata');
Run Code Online (Sandbox Code Playgroud)
以下是 Chrome 的响应:
net::ERR_CONNECTION_RESET
我不知道我做错了什么。我已经搜索过 SO 并阅读了有关创建 zip 文件的文章,但在尝试将 zip 存档返回给客户端时,我无法通过连接重置错误。
有任何想法吗?
你的内存流位于一个using
块内。因此,在控制器有机会将其写出之前,您的内存流已被释放(因此是ERR_CONNECTION_RESET
)。
MemoryStream 不需要显式处置(可能需要显式处置其各种派生类型,但 MemoryStream 本身不需要)。垃圾收集器可以自动清理它。
归档时间: |
|
查看次数: |
2766 次 |
最近记录: |