我有一个返回文件的控制器方法,在所有浏览器中,这与IE11不同。在IE11中,我得到500服务器异常。在我的dotnet run
控制台命令中,我收到此消息。
失败:Microsoft.AspNetCore.Server.Kestrel [13] 连接ID“0HLAA8HNC511P”,请求ID“0HLAA8HNC511P:00000007”:未处理的异常被抛出 应用。 System.InvalidOperationException:响应内容长度 不匹配:写入的字节太少(9283中的0)。
即使在我的app.UseDeveloperExceptionPage();
文件中添加Startup.cs
来电,我似乎也无法捕捉到异常。
我的控制器方法非常简单,看起来像这样
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版。
任何人都知道可能会发生什么?
答案 0 :(得分:1)
我也有这个问题,相反,它不会总是抛出错误。
通过删除操作中的标题来管理解决它:
[HttpGet("{container}/{id}")]
public async Task<IActionResult> Get(string container, string id)
{
/* remove both of these headers... put a warning here to apply the fix after dotnet team distributes the fix. */
HttpContext.Request.Headers.Remove("If-Modified-Since");
HttpContext.Request.Headers.Remove("If-None-Match");
var _fileInfo = provider.GetFileInfo($"{container}/{id}");
if (!_fileInfo.Exists || string.IsNullOrEmpty(id))
/* return a default file here */
var last = _fileInfo.LastModified;
/* ... some code removed for brevity */
return base.File(_fileInfo.CreateReadStream(), MimeTypeMap.GetMimeType(id.Substring(id.LastIndexOf("."))), id, lastModified: _lastModified, entityTag: _etag);
}
dotnet --info
显示version : 2.0.4