C# 返回文件结果时出现HTTP错误500
我现在有一个很奇怪的问题。。。我试图从我的web api返回一个文件,但是我得到了一个HTTP错误500,即使流正在工作并且代码中没有抛出错误C# 返回文件结果时出现HTTP错误500,c#,asp.net-web-api,asp.net-core,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"); 流的大小变为22kb,但当我导航到api的url时,我会得到一个HTTP
var doc = DocX.Load(...);
// ...
var ms = new MemoryStream();
doc.SaveAs(ms);
doc.Dispose();
return File(ms, "application/octet-stream");
流的大小变为22kb,但当我导航到api的url时,我会得到一个HTTP 500,为什么
谢谢。您忘记将memorystream位置重置为起始位置
var doc = DocX.Load(...);
// ...
var ms = new MemoryStream();
doc.SaveAs(ms);
doc.Dispose();
ms.Position = 0;
return File(ms, "application/octet-stream");
您还可以避免临时内存流
var doc = DocX.Load(...);
// ...
doc.SaveAs(Request.Body);
doc.Dispose();
return new EmptyResult();
或者实现自定义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);
}
使用您的调试器,这就是它的原因。如果在运行时抛出异常,您只是无法在调试器中捕获它。(我假设您使用的调试器基于“流正在工作,没有抛出错误…”)。确保您正在中断所有CLR异常(CTRL+ALT+E)。请考虑以下事项,将您的流作为HythPrimPosiScript返回,而不是作为文件。在尝试将memorystream发送到客户端之前,需要重置其位置:
ms.position=0代码>。您可以将文档直接写入Request.Body流。返回一个空的结果。@Kalten确实是这个问题,我忘了寻找溪流的起点。你应该回答这个话题还是我应该把它关闭?非常感谢,这个职位成功了!!