MVC清除缓存,可以解决浏览器后退键带来的问题
来源:互联网 发布:减肥食谱软件 编辑:程序博客网 时间:2024/05/22 14:53
首先讲一下授权
首先AuthorizeAttribute 这个Filter实现了IAuthorization这个接口,是Asp.Net MVC提供的认证和授权功能的实现,要实现自己的认证和授权功能只需要继承AuthorizeAttribute,然后覆盖它的方法就可以了 。
public class MyAuthAttribute : AuthorizeAttribute{ //do something}
首先重写 AuthorizeAttribute的OnAuthorization 方法,代码如下:
public override void OnAuthorization(AuthorizationContext filterContext) { if (filterContext == null) { throw new ArgumentNullException("filterContext"); } if (!AuthorizeCore(filterContext.HttpContext)) { HandleUnauthorizedRequest(filterContext); } else { filterContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache); } }
filterContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);
这句代码就是清除缓存的关键。
AuthorizeAttribute的OnAuthorization方法内部调用了AuthorizeCore方法,这个方法是实现验证和授权逻辑的地方,如果这个方法返回true,
表示授权成功,如果返回false, 表示授权失败, 会给上下文设置一个HttpUnauthorizedResult,这个ActionResult执行的结果是向浏览器返回
一个401状态码,但是通常还是跳转到一个登录页面,可以重写AuthorizeAttribute的
HandleUnauthorizedRequest 方法 :
protected override void HandleUnauthorizedRequest(AuthorizationContext context) { if (context == null) { throw new ArgumentNullException("filterContext is null"); } else { string path = context.HttpContext.Request.Path; string strUrl = "/Account/LogOn?returnUrl={0}"; context.HttpContext.Response.Redirect(string.Format(strUrl, HttpUtility.UrlEncode(path)), true); } }
---------------------------------------------------------
也可单独提取出来清除缓存:
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Mvc; namespace MobileMvc.Models{ public class NoCacheAttribute : ActionFilterAttribute { public override void OnResultExecuted(ResultExecutedContext filterContext) { filterContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache); base.OnResultExecuted(filterContext); } }}
如此,不需要Cache的Action,简单的加上Filter即可:.
[NoCache]public ActionResult PostSomething() { //do something... }
- MVC清除缓存,可以解决浏览器后退键带来的问题
- 禁止浏览器前进和后退 清除缓存
- 清除浏览器的缓存
- 浏览器缓存问题的解决
- 禁用页面缓存。目的:用户登录后退出。点击浏览器后退按钮造成的问题
- java jsp 浏览器后退缓存问题
- 清除浏览器里面的缓存
- 如何清除浏览器的缓存
- 如何清除浏览器的缓存
- php 解决文件状态缓存带来的问题
- 解决ListView 缓存机制带来的显示不正常问题
- javascript中ajax框架及解决缓存带来的问题
- 解决浏览器缓存问题
- 解决浏览器缓存问题
- 解决浏览器缓存问题
- 解决客户 IE 浏览器"兼容性视图"设置带来的问题
- Ajax浏览器缓存问题的解决
- Ajax解决浏览器的缓存问题
- CXF webservice JAXB 处理复杂数据类型方法
- linux驱动学习
- Mysql 体系结构系列之七
- Linux基础命令(自己常用的)
- google奖学金颁奖礼归来小感想
- MVC清除缓存,可以解决浏览器后退键带来的问题
- copy自百科的负载均衡概念
- android 权限 意思
- AS3控制文本
- spring与mybatis三种整合方法
- T-SQL程序设计基础
- 普吉岛
- peer to peer(点对点)实例
- Linux串口通讯(mark, space校验方式的实现)