C#ASP.NETMVC中有四种Filter过滤器类型通过标签Attribute加到act...

C#ASP.NETMVC中有四种Filter过滤器类型通过标签Attribute加到act...

2023年6月20日发(作者:)

C#中有四种Filter过滤器类型通过标签Attribute加到act。。。原⽂链接在 MVC中有四种过滤器类型 Action1、在 MVC项⽬中,新建⽂件夹Filter,然后新建类MyCustormFilter,继承⾃ActionFilterAttribute类,我们来看下ActionFilterAttribute类有如下四个⽅法,从命名我应该就可以看出他们的执⾏时机。 public class MyCustormFilter:ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext filterContext) { ("Action执⾏前"); onExecuting(filterContext); } public override void OnActionExecuted(ActionExecutedContext filterContext) { ("Action执⾏后"); onExecuted(filterContext); } }2、对于过滤器,我们可以把它们加在三个地⽅,⼀个是控制器上⾯(控制器下⾯的所有Action),⼀个是Action上⾯(指定标识的Action),另⼀个就是全局位置(所有控制器中的Action)。这⾥我只演⽰在Action上⾯加 [MyCustormFilter] public ActionResult Index() { return View(); } public ActionResult Index1() { return View(); }

3、build然后运⾏Result 1、新建类TestResultFilter,继承ActionFilterAttribute public class TestResultFilter:ActionFilterAttribute { ///

/// 加载 "视图" 前执⾏ /// /// public override void OnResultExecuting(ExecutingContext filterContext) { ("加载视图前执⾏ OnResultExecuting
"); ltExecuting(filterContext); } /// <summary> /// 加载"视图" 后执⾏ /// </summary> /// <param name="filterContext"></param> public override void OnResultExecuted(ExecutedContext filterContext) { ("加载视图后执⾏ OnResultExecuted <br/>"); ltExecuted(filterContext); }}2、这⾥我把TestResultFilter过滤器加在控制器上⾯ [TestResultFilter] public class FilterTestController : Controller { [MyCustormFilter] public ActionResult Index() { return View(); } public ActionResult Index1() { return View(); } }3、运⾏看下结果注意:Result过滤器,⽆论Action的返回类型为什么(甚⾄void)都将执⾏。RouteData中保存了当前请求匹配的路由信息和路由对象修改 public override void OnActionExecuting(ActionExecutingContext filterContext) { //1.获取获取请求的类名和⽅法名 string strController = ["controller"].ToString(); string strAction = ["action"].ToString();//2.另⼀种⽅式 获取请求的类名和⽅法名 string strAction2 = Name; string strController2 = llerName; ("Action执⾏前</br>"); ("控制器:" + strController + "</br>"); ("控制器:" + strController2+"</br>"); ("Action:" + strAction + "</br>"); ("Action:" + strAction2 + "</br>"); onExecuting(filterContext); } AuthorizeAttribute1、 新建TestAuthorizeAttribute /// /// 授权过滤器 --在Action过滤器前执⾏ /// public class TestAuthorizeAttribute:AuthorizeAttribute { public override void OnAuthorization(AuthorizationContext filterContext) { ("
OnAuthorization
"); //注释掉⽗类⽅法,因为⽗类⾥的 OnAuthorization ⽅法会调⽤的授权验证机制! //orization(filterContext); }}2、在控制器FilterTest中的Index上添加TestAuthorize标记 [MyCustormFilter] [TestAuthorize] public ActionResult Index() { return View(); }运⾏看下结果:Exception1、新建 /// /// 异常处理 过滤器 /// public class TestHandleError : HandleErrorAttribute { public override void OnException(ExceptionContext filterContext) { //1.获取异常对象 Exception ex = ion; //2.记录异常⽇志 //3.重定向友好页⾯ = new RedirectResult("~/"); //4.标记异常已经处理完毕 ionHandled = true; ption(filterContext); }}2、在Action上⾯加TestHandleError [TestHandleError] public ActionResult GetErr() { int a = 0; int b = 1 / a; return View(); }注意:通常这样的异常处理我们是放在全局过滤器上⾯的。 public class FilterConfig { public static void RegisterGlobalFilters(GlobalFilterCollection filters) { //(new HandleErrorAttribute()); //添加全局过滤器 (new TestHandleError()); } }

发布者:admin,转转请注明出处:http://www.yc00.com/news/1687250417a49.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信