Hay*_*tam 4 c# asp.net-web-api asp.net-core
我现在遇到了一个非常奇怪的问题......我正在尝试从我的 web api 返回一个文件,但即使流正在工作并且代码中没有抛出任何错误,我也收到了 HTTP 错误 500。
var doc = DocX.Load(...);
// ...
var ms = new MemoryStream();
doc.SaveAs(ms);
doc.Dispose();
return File(ms, "application/octet-stream");
Run Code Online (Sandbox Code Playgroud)
流的大小变为 22kb,但是当我导航到 api 的 url 时,我得到一个 HTTP 500,为什么?
谢谢你。
您忘记将内存流位置重置为开头。
var doc = DocX.Load(...);
// ...
var ms = new MemoryStream();
doc.SaveAs(ms);
doc.Dispose();
ms.Position = 0;
return File(ms, "application/octet-stream");
Run Code Online (Sandbox Code Playgroud)
您还可以避免临时 MemoryStream
var doc = DocX.Load(...);
// ...
doc.SaveAs(Request.Body);
doc.Dispose();
return new EmptyResult();
Run Code Online (Sandbox Code Playgroud)
或者实现一个自定义的 ActionResult
public class DocXResult : IActionResult
{
private DocX _doc;
public DocXResult(DocX doc) { _doc = doc); }
public Task ExecuteResultAsync(ActionContext context)
{
var response = context.HttpContext.Response;
response.ContentType = "application/octet-stream";
_doc.SaveAs(response.Body);
return Task.CompletedTask;
}
}
public IActionResult SendDocX()
{
DocX doc = null; // do your stuff
this.Response.RegisterForDispose(doc);
return new DocXResult(docX);
}
Run Code Online (Sandbox Code Playgroud)