MVC之过滤器
1.过滤器
《a》:Authorization 默认实现 AuthorizeAttribute身份验证过滤器,首先运行,在其他过渡器的操作操作方法前执行;
《b》:Action 运行之前 和之后的动作方法;
public class MyAction:ActionFilterAttribute
{
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
//base.OnResultExecuting(filterContext);
filterContext.HttpContext.Response.Write("视图执行前 <br>");
} public override void OnResultExecuted(ResultExecutedContext filterContext)
{
// base.OnResultExecuted(filterContext);
filterContext.HttpContext.Response.Write("视图执行后 <br>");
} //表示行为处理前,需要执行的代码
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
//base.OnActionExecuting(filterContext);
filterContext.HttpContext.Response.Write("行为处理前 <br>");
}
//表示行为处理后,需要执行的代码
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
//base.OnActionExecuted(filterContext);
filterContext.HttpContext.Response.Write("行为处理后 <br>");
}
}
《c》:Result 运行前后执行的操作结果;
《d》:Exception 如果只运行另一个过渡器,操作方法或行动结果抛出一个异常。
两种实现方式:第一种自定义类实现类AuthorizeAttribute 重写方法
public class MyAuthorization : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
//如果保留,则会运行.net framework自已定义 好的身份验证; 如果希望走自己定义的身份验证,则删除如下代码。
// base.OnAuthorization(filterContext); //如果希望跳转到另外一个页面,需要使用filterContext.Result, 而不是使用filterContext.HttpContext.Response.Redirect("");因为Redirect不会使服务器停止。
// filterContext.HttpContext.Response.Redirect("");
// filterContext.Result = new RedirectResult(UrlHelper.GenerateUrl("","Login","UserInfo")); filterContext.HttpContext.Response.Write(""); //路由信息
//filterContext.RouteData //校验用户是否登陆 //var routeDictionary = new System.Web.Routing.RouteValueDictionary { { "action", "Login" }, { "controller", "Account" } }; //filterContext.Result = new RedirectToRouteResult(routeDictionary); }
}
然后在控制器的方法中添加该特性如下:
// [MyAuthorization] //表示当前类下面的所有行为在执行前都要 执行身份验证过滤器。
public class HomeController : Controller
{
//
// GET: /Home/ [MyAuthorization] //表示当前行为在执行前执行身份验证过滤器。
public ActionResult Index()
{
return View();
}
//过渡器的第二种实现方式:重写控制器的方法,这样,会应用于所有的行为:
protected override void OnAuthorization(AuthorizationContext filterContext)
{
filterContext.HttpContext.Response.Write("");
}
}
该特性有 三种添加方法:1:直接在方法上添加特性,2:在控制器上添加,
3:在Global的 FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);中添加如下:
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
//在全局中注册过滤器,那么所有的控制器的的所有行为都要执行该 过渡器
// filters.Add(new MyAuthorization());
}
//过渡器的第二种实现方式:重写控制器的方法,这样,会应用于所有的行为:
// [MyAuthorization] //表示当前类下面的所有行为在执行前都要 执行身份验证过滤器。
public class HomeController : Controller
{
//
// GET: /Home/ [MyAuthorization] //表示当前行为在执行前执行身份验证过滤器。
public ActionResult Index()
{
return View();
}
//过渡器的第二种实现方式:重写控制器的方法,这样,会应用于所有的行为:
protected override void OnAuthorization(AuthorizationContext filterContext)
{
filterContext.HttpContext.Response.Write("");
}
}
或者是新建一个控制器,添加过渡器的方法再使想应用该 过渡器的控制器 继承于该控制器:
namespace t1_Filter.Controllers
{
public class MyBaseController : Controller
{
//过渡器的第二种实现方式:重写控制器的方法,这样,会应用于所有的行为:
protected override void OnAuthorization(AuthorizationContext filterContext)
{
filterContext.HttpContext.Response.Write("");
}
}
}
public class HomeController : MyBaseController
MVC之过滤器的更多相关文章
- 使用ASP.NET MVC操作过滤器记录日志(转)
使用ASP.NET MVC操作过滤器记录日志 原文地址:http://www.singingeels.com/Articles/Logging_with_ASPNET_MVC_Action_Filte ...
- 爱上MVC系列~过滤器实现对响应流的处理
回到目录 MVC的过滤器相信大家都用过,一般用来作权限控制,因为它可以监视你的Action从进入到最后View的渲染,整个过程ActionFilter这个过滤器都参与了,而这给我们的开发带来了更多的好 ...
- ASP.NET MVC : Action过滤器(Filtering)
http://www.cnblogs.com/QLeelulu/archive/2008/03/21/1117092.html ASP.NET MVC : Action过滤器(Filtering) 相 ...
- MVC 自定义过滤器/特性来实现登录授权及验证
最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精 最近在做自学MVC,遇到的问题很多,索性一点点总结 ...
- [翻译] 使用ASP.NET MVC操作过滤器记录日志
[翻译] 使用ASP.NET MVC操作过滤器记录日志 原文地址:http://www.singingeels.com/Articles/Logging_with_ASPNET_MVC_Action_ ...
- MVC 授权过滤器 AuthorizeAttribute
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...
- MVC自定义过滤器,自定义Area过滤器,自定义Controller,Action甚至是ViewData过滤器
实现MVC自定义过滤器,自定义Area过滤器,自定义Controller,Action甚至是ViewData过滤器 MVC开发中几种以AOP方式实现的Filters是非常好用的,默认情况下,我们通过A ...
- mvc全局过滤器和httpmodule的执行顺序
根据http管线模型,请求先通过httpmodule,再通过httphandler,之后再进入mvc的过滤器 另外参考:MVC如何在Pipeline中接管请求的? http://www.cnblogs ...
- 实现MVC自定义过滤器,自定义Area过滤器,自定义Controller,Action甚至是ViewData过滤器
MVC开发中几种以AOP方式实现的Filters是非常好用的,默认情况下,我们通过App_Start中的FilterConfig来实现的过滤器注册是全局的,也就是整个应用程序都会使用的,针对单独的Fi ...
- ASP.NET MVC动作过滤器
ASP.NET MVC提供了4种不同的动作过滤器(Aciton Filter). 1.Authorization Filter 在执行任何Filter或Action之前被执行,用于身份验证 2.Act ...
随机推荐
- 使用SAXReader读取ftp服务器上的xml文件(原创)
根据项目需求,需要监测ftp服务器上的文件变化情况,并将新添加的文件读入项目系统(不需要下载). spring配置定时任务就不多说了,需要注意的一点就是,现在的项目很多都是通过maven构建的,分好多 ...
- ZipArchive之C++编译和调用
由于要用到zip的解压,就上网下载了CZipArchive类的源码(还是2000年的),里面有个示例,稍微修改下,就能正常运行. 就高兴地把lib拿出来,放到项目中了.捣鼓了快一个下午了,死活编译不通 ...
- WindowsAPI开发常用资料
主类 子类 功能 Win32API SHGetSpecialFolderLocation 获取系统特殊文件夹路径(SHGetSpecialFolderLocation) 通过 SHGetSpecial ...
- new 与 malloc 的区别
1, 申请内存所在的位置 new 操作符从自由存储区上为对象动态分配内存空间,而 malloc 函数从堆上动态分配内存.自由存储区是C++基于 new 操作符的一个抽象概念,而堆是操作系统中的术语,是 ...
- 自建yum源及分组安装
最近在研究一套自动化运维方向的框架,在想到远程安装软件包的时候,觉得有yum支持会更方便一些.主要思路是把程序员写的代码或程序打包成rpm,然后提交到自建yum源,并实现按组安装,本地yum源实现步骤 ...
- VS调试技巧,提高调试效率(转):
如果你还没有使用过这些技巧,希望这篇博文能帮你发现它们. 它们学起来很容易,能帮你节省很多时间. 运行到光标(Ctrl+ F10) 我经常看见人们是这样来调试应用程序的: 他们在应用程序需要调试的代码 ...
- Centos 6.5编译安装yum
1.删除redhat原有的yum rpm -aq|grep yum|xargs rpm -e --nodeps 2.下载yum安装文件 wget http://mirrors.163.com/cent ...
- 中文字符串转换为十六进制Unicode编码字符串
package my.unicode; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Uni ...
- Nginx快速入门菜鸟笔记
Nginx快速入门-菜鸟笔记 1.编译安装nginx 编译安装nginx 必须先安装pcre库. (1)uname -a 确定环境 Linux localhost.localdomain 2.6. ...
- sql 跨库查询备忘笔记
select * from OPENDATASOURCE( 'SQLOLEDB', 'Data Source=远程ip;User ID=sa;Password=密码' ).库名.dbo.表名 inse ...