1.过滤器的使用(创建一个MyFilter文件夹存储所有的过滤器) 1.1 Authorization 1.1.1创建一个MyAuthorization继承自AuthorizatioAttribute 1.1.2重写OnAuthorization方法,传入一个filterContext 1.1.3 客户端重定向的时候不要使用filterContext.HttpContet.Response.Ridirect(string url),而是使用filterContext.Result,因为第一种不会让服务器段停止执行. filterContext.Result=new RedirectResult(UrlHelper.GenerateUrl()); 1.1.4 给要添加过滤的行为或者控制器中添加定义的过滤器:格式是[MyAuthorization],则有添加特性的过滤器获取方法就会先去执行过滤器中的内容,再执行行为. namespace t1_Filter.Controllers { //当前控制器下的所有行为均进行定义的身份验证过滤器 [MyAuthorization] public class HomeController : Controller { // // GET: /Home/ //添加一个身份验证的过滤器 //[MyAuthorization] public ActionResult Index() { return View(); } public ActionResult Show() { return View(); } } } 1.1.5 当需要给所有控制器所有行为添加身份验证过滤器的时候.在global文件中注册 public static void RegisterGlobalFilters(GlobalFilterCollection filters) { // 原来的身份验证过滤器 //filters.Add(new HandleErrorAttribute()); //在全局中注册过滤器,则所有控制器的所有行为,都会执行这个过滤器 filters.Add(new MyAuthorization()); } 1.1.6 第二种,使用在控制器中重写onAuthorization的方法来实现 protected override void OnAuthorization(AuthorizationContext filterContext) { filterContext.HttpContext.Response.Write("这是在控制器中重写的身份验证过滤器"); } 1.2 异常处理过滤器 使用的方法如身份验证过滤器,不过一般注册到Global文件的过滤器中 public override void OnException(ExceptionContext filterContext) { //以下代码不可以被删除,否则捕获不到异常 base.OnException(filterContext); //记录日志 //页面跳转 filterContext.Result=new RedirectResult("/Error/404.html"); } 注意:要更改配置文件:在system.web节点中添加一个customErrors节点 <system.web> <customErrors mode="On"></customErrors> <system.web> 1.3 行为过滤器:继承自ActionFilterAttribute 1.3.1 OnActionExcuting(行为前) 1.3.2 OnActionExcuted(行为后) 1.4 结果过滤器:继承自ActionFilterAttribute 1.4.1 OnResultExcuting(结果执行前) 1.4.2 OnResultExcuted(结果执行后) Demo: public class MyAction:ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext filterContext) { filterContext.HttpContext.Response.Write("自定义行为执行前方法<br/>"); } public override void OnActionExecuted(ActionExecutedContext filterContext) { filterContext.HttpContext.Response.Write("自定义行为执行后方法<br/>"); } public override void OnResultExecuting(ResultExecutingContext filterContext) { filterContext.HttpContext.Response.Write("结果执行前的方法<br/>"); } public override void OnResultExecuted(ResultExecutedContext filterContext) { filterContext.HttpContext.Response.Write("结果执行后的方法<br/>"); } } 总结: =>过滤器的的实现由两种方式: 1.自定义类,然后给要执行的控制器或者方法添加特性 2.重写Controller类的方法 =>过滤器的种类4种: 1.身份验证过滤器 2.异常处理过滤器 3.行为过滤器 4.结果过滤器
时间: 2024-10-06 06:08:12