C# ASPNET核心使用IE11返回文件失败?内容长度不匹配
我有一个返回文件的控制器方法,在除IE11之外的所有浏览器中都可以使用。在IE11中,我得到一个500服务器异常。在我的C# ASPNET核心使用IE11返回文件失败?内容长度不匹配,c#,asp.net,.net,asp.net-mvc,asp.net-web-api,C#,Asp.net,.net,Asp.net Mvc,Asp.net Web Api,我有一个返回文件的控制器方法,在除IE11之外的所有浏览器中都可以使用。在IE11中,我得到一个500服务器异常。在我的dotnet运行console命令中,我得到了这个消息 失败:Microsoft.AspNetCore.Server.Kestrel[13] 连接id“0HLAA8HNC511P”,请求id“0HLAA8HNC511P:0000000 7”:服务器引发了未经处理的异常 应用System.InvalidOperationException:响应内容长度 不匹配:写入的字节太少(9
dotnet运行
console命令中,我得到了这个消息
失败:Microsoft.AspNetCore.Server.Kestrel[13]
连接id“0HLAA8HNC511P”,请求id“0HLAA8HNC511P:0000000 7”:服务器引发了未经处理的异常
应用System.InvalidOperationException:响应内容长度
不匹配:写入的字节太少(9283中的0个)
即使添加app.usedeveloperceptionpage(),我似乎也无法捕捉到异常代码>调用我的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);
}
公共异步任务GetAsync([FromRoute]长id、[FromRoute]长文件id、[FromQuery]文件预览模型预览选项)
{
var entity=await\u fileService.GetAsync(模块,id,fileId);
var fileName=“MEARS 2000徽标”;
var contentType=“image/gif”;
//这是一个字节数组
var数据=entity.data.Content;
//返回文件内容
返回文件(数据、内容类型、文件名);
}
在IE11中,请求和响应头如下所示
在chrome中,我的标题看起来是这样的
我已将我的dotnet SDK更新为2.1.3版
有人知道可能会发生什么吗 我也有这个问题,相反,它不会总是抛出错误
通过删除操作中的标题来解决此问题,如下所示:
[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);
}
[HttpGet(“{container}/{id}”)]
公共异步任务Get(字符串容器,字符串id)
{
/*删除这两个标题…在此处放置警告,以便在dotnet团队分发修复程序后应用修复程序*/
HttpContext.Request.Headers.Remove(“如果自修改”);
HttpContext.Request.Headers.Remove(“如果不匹配”);
var_fileInfo=provider.GetFileInfo($“{container}/{id}”);
如果(!_fileInfo.Exists || string.IsNullOrEmpty(id))
/*在此处返回默认文件*/
var last=\u fileInfo.LastModified;
/*…为了简洁起见,删除了一些代码*/
返回base.File(_fileInfo.CreateReadStream(),MimeTypeMap.GetMimeType(id.Substring(id.LastIndexOf(“.”)),id,lastModified:_lastModified,entityTag:_etag);
}
dotnet--info
显示版本:2.0.4
实体、数据、内容的类型是什么?它是一个流
还是一个字节[]
数组。字节[]
(更新了此细节的帖子)对不起,我没有说清楚这可能与什么有关。添加Context.Request.Headers.Remove(“如果自修改”)
如何防止异常发生?@Wazner我想这个问题在2.1中已经解决了。OP使用的是2.1.3我在2.0.3上试过了,但没用。我已经升级到2.1.3,但它仍然不工作。我已经尝试添加HttpContext.Request.Headers.Remove(“内容长度”)
和HttpContext.Request.Headers.Remove(“如果自修改”)在我调用并返回文件
之前,code>,但仍然会遇到相同的问题。