@ Guffa의 대답을 확장하고 선택한 해결책을 공유 할 것입니다.
Server.Transfer
메서드를 호출 할 때 .NET 엔진은이를 .aspx
페이지와 같이 처리하므로 정적 파일을 처리 할 때 필요한 적절한 HTTP 헤더 (예 : 캐싱)를 추가하지 않습니다.
는 Response.Redirect
를 사용하여 세 가지 옵션
- 있다, 그래서 브라우저는
- 헤더가 필요한 설정 및 내용
- 필요한 헤더를 설정하고
Server.Transfer
를 호출을 제공하기 위해
Request.BinaryWrite
를 사용하여 해당 요청을
제 3의 옵션을 선택합니다. 내 코드는 다음과 같습니다.
try
{
DateTime fileLastModified = File.GetLastWriteTimeUtc(MapPath(fileVirtualPath));
fileLastModified = new DateTime(fileLastModified.Year, fileLastModified.Month, fileLastModified.Day, fileLastModified.Hour, fileLastModified.Minute, fileLastModified.Second);
if (Request.Headers["If-Modified-Since"] != null)
{
DateTime modifiedSince = DateTime.Parse(Request.Headers["If-Modified-Since"]);
if (modifiedSince.ToUniversalTime() >= fileLastModified)
{
Response.StatusCode = 304;
Response.StatusDescription = "Not Modified";
return;
}
}
Response.AddHeader("Last-Modified", fileLastModified.ToString("R"));
}
catch
{
Response.StatusCode = 404;
Response.StatusDescription = "Not found";
return;
}
Server.Transfer(fileVirtualPath);
가능한 복제본 [Server.Transfer Asp.Net?](http://stackoverflow.com/questions/11417355/how-to-set-response-header-before-server)에서 응답 헤더를 설정하는 방법 - transfer-in-asp-net) –
@Cthulhu 응답 헤더를 설정하는 방법 **을 묻는 중입니다 ** ** 설정해야하는 경우 – Abir