2017-12-23 39 views
1

파일을 반환하는 컨트롤러 메서드가 있고 모든 브라우저에서 IE11과 별도로 작동합니다. IE11에서는 500 서버 예외가 발생합니다. 내 dotnet run 콘솔 명령에서이 메시지가 나타납니다.ASPNET Core 파일을 반환하는 데 IE11을 사용하지 못합니까? Content_Length 불일치

실패 : Microsoft.AspNetCore.Server.Kestrel [13] 접속 ID "0HLAA8HNC511P"요청 ID "0HLAA8HNC511P : 00000007"처리되지 않은 예외 애플리케이션에 의해 발생되었다. System.InvalidOperationException : 응답 콘텐츠 길이 불일치 : 너무 적은 바이트를 썼습니다 (0 9283).

심지어 Startup.cs 파일에 app.UseDeveloperExceptionPage(); 전화를 추가하여 예외를 잡을 수없는 것 같습니다.

내 컨트롤러 방법은 매우 간단하고 IE11에서이

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); 
} 

처럼 보이는, 요청 및 응답 헤더는 다음과 같습니다. 크롬에서

enter image description here

, 내 헤더는 너무처럼 보인다.

enter image description here

나는 버전 2.1.3 내 후에 .NET SDK를 업데이트했습니다.

누구나 가능할지 모릅니다 ??

+0

'entity.Data.Content'의 유형은 무엇입니까 version : 2.0.4을 보여줍니다

이 같은 조치 내부 헤더를 제거하여 그것을 해결하기 위해 관리? 그것은'Stream' 또는'byte []'배열입니다. – Wazner

+0

'byte []'(이 세부 정보가있는 업데이트 된 게시물) 죄송합니다. 알 수 없음 – Gillardo

+1

https://github.com/aspnet/Mvc/issues/6875와 관련이있을 수 있습니다. 액션에 Context.Request.Headers.Remove ("If-Modified-Since");를 추가하면 예외가 발생하지 않도록 할 수 있습니까? – Wazner

답변

0

이 문제도 있었지만 항상 오류가 발생하지는 않습니다.

[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