我有两个页面,如(在线页面和离线页面),在角度和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();
答案 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);
}
}