我會擴展@ Guffa的答案並分享我選擇的解決方案。
當調用Server.Transfer
方法時,.NET引擎將其視爲.aspx
頁面,因此它在提供靜態文件時不會添加所需的適當HTTP頭(例如用於緩存)。
有三個選項
- 使用
Response.Redirect
,所以瀏覽器進行適當的請求
- 設置頁眉需要使用
Request.BinaryWrite
服務內容
- 設置所需的標題和調用
Server.Transfer
我選擇第三個選項,這裏是我的代碼:
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