如何删除SPA中特定页面的应用程序缓存

时间:2018-03-08 08:02:52

标签: javascript c# asp.net angularjs asp.net-mvc

我有两个页面,如(在线页面和离线页面),在角度和MVC中使用SPA。如果网络丢失,则离线页面应该工作并且不应加载在线页面,它应该显示错误。 (没有互联网连接)。我做了什么,我创建了一个清单文件并添加到布局HTML。每当我加载我的SPA清单时,都会添加到应用程序缓存中。现在,如果网络消失了,当我点击在线页面时,由于应用程序缓存,没有任何事情发生。我现在要做的就是从浏览器中删除应用程序缓存。请让我知道实现这种情况。

我尝试使用MVC控制器删除应用程序缓存,但是这个没有用。

filterContext.HttpContext.Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1));
filterContext.HttpContext.Response.Cache.SetValidUntilExpires(false);
filterContext.HttpContext.Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
filterContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);
filterContext.HttpContext.Response.Cache.SetNoStore();

2 个答案:

答案 0 :(得分:0)

在要删除缓存的控制器或操作中使用[NoCache]属性。

[Authorize]
[NoCache]

public class LeaveController : Controller
{

答案 1 :(得分:0)

这应该适用于.NET Core 2.0:

[Authorize]
[ResponseCache(Location = ResponseCacheLocation.None, NoStore = true)]
public class LeaveController : Controller
{
...

这适用于.NET 4.7:

[AuthorizeNoCache]
public class LeaveController : Controller
{

...

要使用[AuthorizeNoCaching],您需要:

class AuthorizeNoCaching : AuthorizeAttribute
{
    ////https://stackoverflow.com/questions/10011780/prevent-caching-in-asp-net-mvc-for-specific-actions-using-an-attribute?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa
    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        //filterContext.HttpContext.Response.Cache.SetAllowResponseInBrowserHistory(false);  //We want them to be able to see the pages they've been to in the browser history for now.
        //https://stackoverflow.com/questions/866822/why-both-no-cache-and-no-store-should-be-used-in-http-response
        filterContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);
        filterContext.HttpContext.Response.Cache.SetNoStore();
        filterContext.HttpContext.Response.Cache.SetExpires(DateTime.Now);
        filterContext.HttpContext.Response.Cache.SetValidUntilExpires(true);
        base.OnAuthorization(filterContext);
    }
}