ASP.NET을 사용하여 파일을 스트리밍 할 때 IIS7이 내 컨텐츠 유형 헤더를 무시하는 이유는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/2230516

문제

두 페이지가있는 간단한 웹 사이트가 있습니다. 하나는 파일 목록을 표시하고 다른 하나는 목록에서 클릭하면 파일을 스트리밍합니다. 모두 6 개월 동안 생산이 좋았지 만 이제는 사이트를 Windows 2008/IIS7로 옮겨야합니다. 대부분 작동하지만 내용 유형 헤더가 무시되기 때문에 파일이 제대로 열리지 않습니다 (Firefox). 생산 현장 (IIS6)에서 헤더는 (피들러 사용)입니다.

HTTP/1.1 200 OK
Date: Tue, 09 Feb 2010 16:00:51 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Content-Disposition: attachment; filename="myfile__foo.pdf"
Content-Length: 236841
Cache-Control: no-cache, no-store
Pragma: no-cache
Expires: -1
Content-Type: application/octet-stream

그러나 테스트 IIS7 서버에서는 다음과 같습니다.

HTTP/1.1 200 OK
Cache-Control: private
Content-Length: 236841
Content-Type: text/html; charset=utf-8
Server: Microsoft-IIS/7.5
X-AspNet-Version: 2.0.50727
Content-Disposition: attachment; filename="myfile__foo.pdf"

Fiddler는 또한 프로토콜 위반을보고하고 "콘텐츠 길이 불일치 : 응답 헤더는 236841 바이트를 주장했지만 서버는 238378 바이트를 보냈습니다."라고 말합니다.

내 코드는 다음과 같습니다.

            Response.Clear();
            Response.AddHeader("Content-Disposition", "attachment; filename=\"" + doc.DisplayFilename + "." + doc.FileExtension + "\"");
            Response.AddHeader("Content-Length", file.Length.ToString());
            Response.ContentType = "application/octet-stream";
            Response.TransmitFile(file.FullName);
            Response.End();

나는 며칠 동안 이것을 고치려고 노력했다. 나는 IIS7에 익숙하지 않으며 다양한 설정을 변경해야 할 곳을 찾기 위해 고군분투했습니다. 나는 두 개의 관리 된 파이프 라인 모드에 대해 알아 내고 클래식 .NET AppPool (통합이 파일을 전송할 때 모든 종류의 오류를 던지고 있음)으로 전환하여 다른 문제를 해결했습니다.

IIS7에게 내 ContentType 헤더를 덮어 쓰지 말라고 지시하는 방법이 있습니까?

도움이 되었습니까?

해결책

요청/응답을 수정하는 httpmodules가 없습니까? web.config 파일이 정확히 동일합니까?

이 추가 2K 바이트는 어디에서 왔습니까? 그들 안에 무엇이 있습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top