MVC中的Filter:权限验证FIlter
MVC为我们提供了四种Filter
IAuthorizationFilter
IActionFilter
IResultFilter
IExceptionFilter
1、IAuthorizationFilter(权限验证Filter)
一般用来检查当前用户是否有Action的执行权限,在每个Action被执行前执行OnAuthorization方法:
2、IActionFilter
也是在每个Action被执行前执行OnActionExecuting方法,每个Action执行完成之后执行OnActionExecuted方法。
和IAuthorizationFilter的区别是IAuthorizationFilter在IActionFilter之前执行,检查权限一般写到IAuthorizationFilter中。
3、IResultFilter
在每个ActionResult的前后执行IResultFilter,很少使用。
4、IExceptionFilter(异常处理Filter)
当Action的执行发生未处理的异常的时候执行OnException方法。在ASP.Net中,仍可以使用Gobal的Application_Error处理异常
建议使用IExceptionFilter
IAuthorizationFilter应用:只用登录后才可以访问LoginController之外的Controller(对登录页面不检查,不然会进不去登录页面)
页面的创建:
创建LoginController,创建Index Action用于显示登陆页面


LoginController中创建Login Action接收表单提过来的直接,登陆成功存值到Session中
页面跳转到HomeController中的Indenx页面,登陆失败返回登陆失败。

HomeControler,Index

配置Filter
创建一个类CheLoginFilter类,实现IAuthorizationFilter接口,重写OnAuthorization方法
设置除了Login页面意外其他的Controller和Action都进行检查,如果没有登录就跳转到登录页

在Global 中注册全局使用自定义的CheLoginFilter

IActionFilter应用:让每个Action执行前后都记录一次日志
创建LogActionFilter类,实现IActionFilter接口,重写OnActionExecuting和OnActionExecuted方法
OnActionExecuting在Action执行前执行:我们在OnActionExecuting方法中拿到当前执行到的Controller和Action名字,记录到Log.txt中
OnActionExecuted在Action执行前执行:也是在OnActionExecuting方法中拿到当前执行到的Controller和Action名字,记录到Log.txt中

在Global 中注册全局使用自定义的LogActionFilter

运行程序,在项目更目录

IEXceptionFilter应用:如果当前执行的Action中有异常,则记录到error.txt文件中
创建ExceptionFilter类,实现IExceptionFilter接口,重写OnException方法,在里面记录异常信息

在Global 中注册全局使用自定义的ExceptionFilter

造一个异常出来

运行程序,查看结果


filterContext.ExceptionHandled = true;// 如果有其它的IExceptionFilter,不会在执行

非全局Filter:
我们在Global文件中的Application_Start()方法中注册的Filter都是全局使用的
也就是说执行到任何Controller和Action都会执行Filter

如果我们想指定某个Controller或者Action上执行我们自定义的Filter,那么就让自定义的Filter类
继承FilterAttribute类在实现对应的Filter接口。
然后在要使用Filter的Controller或者Action上以特性的方式标注即可。这样,就只在标注的Controller或者Action启用了Filter。



浙公网安备 33010602011771号