我發現很多有關獲取瀏覽器以避免緩存動態內容(例如.aspx頁面)的好信息,但是我沒有成功獲取瀏覽器來緩存我的靜態內容,特別是css,javascript和圖像文件。使用ASP.Net,如何爲靜態內容啓用瀏覽器緩存並禁用動態內容?
我一直在使用Application.BeginRequest Global.asax沒有成功。爲靜態內容分配服務器不是我們的選擇。我也想避免必須配置IIS設置,除非它們可以通過web.config進行控制。爲aspx頁面禁用緩存是否會影響顯示在其上的靜態內容的緩存?
如果此問題已被回答,我很抱歉。
作爲討論的起點,下面是我的Global.asax文件的代碼。
public class Global_asax : System.Web.HttpApplication
{
private static HashSet<string> _fileExtensionsToCache;
private static HashSet<string> FileExtensionsToCache
{
get
{
if (_fileExtensionsToCache == null)
{
_fileExtensionsToCache = new HashSet<string>();
_fileExtensionsToCache.Add(".css");
_fileExtensionsToCache.Add(".js");
_fileExtensionsToCache.Add(".gif");
_fileExtensionsToCache.Add(".jpg");
_fileExtensionsToCache.Add(".png");
}
return _fileExtensionsToCache;
}
}
public void Application_BeginRequest(object sender, EventArgs e)
{
var cache = HttpContext.Current.Response.Cache;
if (FileExtensionsToCache.Contains(Request.CurrentExecutionFilePathExtension))
{
cache.SetExpires(DateTime.UtcNow.AddDays(1));
cache.SetValidUntilExpires(true);
cache.SetCacheability(HttpCacheability.Private);
}
else
{
cache.SetExpires(DateTime.UtcNow.AddDays(-1));
cache.SetValidUntilExpires(false);
cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
cache.SetCacheability(HttpCacheability.NoCache);
cache.SetNoStore();
}
}
}
太棒了!太簡單了。我以前遇到的問題(從Application_BeginRequest控制緩存)與使用Visual Studio Development Server有什麼關係?另外,是否有類似的動態內容標籤? –
我不認爲Visual Studio Development Server與它有任何關係。你打算使用頁面緩存嗎?如果是,您可以使用web.config設置來控制持續時間。 –
我想確保動態內容不會被緩存。 Application_BeginRequest中的代碼做得很好。我已將.axd添加到_fileExtensionsToCache,這似乎阻止了瀏覽器緩存設置在此處被覆蓋。只是詢問是否有更好的方法來做到這一點,即在web.config中。 –