【发布时间】:2017-12-23 20:43:37
【问题描述】:
我有一个返回文件的控制器方法,并且在除 IE11 之外的所有浏览器中都可以使用。在 IE11 中,我得到一个 500 服务器异常。在我的dotnet run 控制台命令中,我收到了这条消息。
失败:Microsoft.AspNetCore.Server.Kestrel[13] Connection id "0HLAA8HNC511P", Request id "0HLAA8HNC511P:00000007": 一个未处理的异常被抛出 应用。 System.InvalidOperationException:响应内容长度 不匹配:写入的字节太少(9283 个中的 0 个)。
我似乎也无法捕捉到异常,即使在我的 Startup.cs 文件中添加了 app.UseDeveloperExceptionPage(); 调用。
我的控制器方法很简单,长这样
public async Task<IActionResult> GetAsync([FromRoute] long id, [FromRoute] long fileId, [FromQuery] FilePreviewModel previewOptions)
{
var entity = await _fileService.GetAsync(Module, id, fileId);
var fileName = "MEARS 2000 LOGO";
var contentType = "image/gif";
// this is a byte array
var data = entity.Data.Content;
// return file content
return File(data, contentType, fileName);
}
在 IE11 中,请求和响应标头如下所示。
在 chrome 中,我的标题看起来像这样。
我已将我的 dotnet SDK 更新到 2.1.3 版。
有人知道可能发生了什么吗?
【问题讨论】:
-
entity.Data.Content的类型是什么?是Stream还是byte[]数组。 -
byte[](更新了这个细节的帖子)抱歉没有说清楚 -
这可能与github.com/aspnet/Mvc/issues/6875 有关。将
Context.Request.Headers.Remove("If-Modified-Since");添加到您的操作中是否可以防止异常发生? -
@Wazner 我认为该问题已在 2.1 中修复。 OP 正在使用 2.1.3
-
我在 2.0.3 上试过这个,但没有用。我已经升级到 2.1.3 还是不行。我尝试在调用并返回
File之前添加HttpContext.Request.Headers.Remove("Content-Length");和HttpContext.Request.Headers.Remove("If-Modified-Since");,但仍然遇到同样的问题。
标签: c# asp.net .net asp.net-mvc asp.net-web-api