HTML5技术

Asp.Net MVC学习总结(三)——过滤器你怎么看? - SeeYouBug(3)

字号+ 作者:H5之家 来源:H5之家 2017-03-06 17:01 我要评论( )

MyAuthorizeAttribute : AuthorizeAttribute 2 { [] allowedUsers; [] users) 5 { , , }; 7 } AuthorizeCore(HttpContextBase httpContext) 10 { 11 return httpContext.Request.IsAuthenticated allowedUsers.Cont

MyAuthorizeAttribute : AuthorizeAttribute 2 { [] allowedUsers; [] users) 5 { , , }; 7 } AuthorizeCore(HttpContextBase httpContext) 10 { 11 return httpContext.Request.IsAuthenticated &&allowedUsers.Contains(httpContext.User.Identity.Name, 12 StringComparer.InvariantCultureIgnoreCase); 13 } 14 } 

2.4、使用动作过滤器

 动作过滤器是可以以用于任何目的的多用途过滤器,创建自定义动作过滤器需要实现IActionFilter接口,该接口代码如下所示:

实现OnActionExecting方法

ActionDescriptor

Result

我们可以用过滤器来取消一个请求,通过设置Result属性即可。代码如下所示:

MyActionFilterAttribute : FilterAttribute, IActionFilter 2 { OnActionExecuting(ActionExecutingContext filterContext) 4 { 5 if(filterContext.HttpContext.Request.IsLocal) 6 { 7 filterContext.Result = new HttpNotFoundResult(); 8 } 9 } OnActionExecuted(ActionExecutedContext filterContext) 11 { } 14 }

 

实现OnActionExecuted方法

我们也可以通过OnActionExecuted方法来执行一些跨越动作方法的任务,下面这个例子是计算动作方法运行的时间,代码如下:

MyActionFilterAttribute : FilterAttribute, IActionFilter 2 { 3 private Stopwatch timer; OnActionExecuting(ActionExecutingContext filterContext) 5 { 6 timer = Stopwatch.StartNew(); 7 } OnActionExecuted(ActionExecutedContext filterContext) 9 { 10 timer.Stop(); 11 if (filterContext.Exception == null) 12 { 13 filterContext.HttpContext.Response.Write( , 15 timer.Elapsed.TotalSeconds)); 16 } 17 } 18 } 19 }

2.5、使用结果过滤器

结果过滤器是多用途的过滤器,他会对动作方法所产生结果进行操作,结果过滤器实现IResultFilter接口,创建自定义结果过滤器需要现IResultFilter接口,该接口代码如下所示:

下面这个例子是计算动作方法返回结果运行的时间,代码如下:

MyResultFilterAttribute : FilterAttribute, IResultFilter 2 { 3 private Stopwatch timer; OnResultExecuting(ResultExecutingContext filterContext) 5 { 6 timer = Stopwatch.StartNew(); 7 } OnResultExecuted(ResultExecutedContext filterContext) 9 { 10 timer.Stop(); , timer.Elapsed.TotalSeconds)); 12 } 13 }

需要注意的是:动作过滤器是运行在页面输出之前,结果过滤器是运行在页面输出之后。

2.6、使用异常过滤器

异常过滤器只有在调用一个动作方法而抛出未处理的异常才会运行,这种异常来自以下位置:

A另一种过滤器(授权、动作、或结果过滤器)。

B动作方法本身。

C当动作结果被执行时。

使用内置的异常过滤器

HandleErrorAttribute(

1.ExceptionType

2.View:

3.Master:呈递的视图页的母板页,如果不指定,视图会用其默认的母版页

此过滤器还会给视图传递一个HandleErrorInfo类型的对象给视图,以便视图可以显示一些额外的关于错误的信息。下面是使用异常过滤器的示例。

应用到Index动作方法上:

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • ASP.NET Core MVC上传、导入、导出知多少 - Jeffcky

    ASP.NET Core MVC上传、导入、导出知多少 - Jeffcky

    2017-03-02 18:01

  • HTML5标签学习笔记 - 就只是小茗

    HTML5标签学习笔记 - 就只是小茗

    2017-02-28 11:00

  • 小白学习H5从入门到放弃 - strength小宝

    小白学习H5从入门到放弃 - strength小宝

    2017-02-27 16:01

  • 跨专业学习编程的苦逼生活 QWQ嘤嘤嘤(第一周) - 天冷吃冰棍儿

    跨专业学习编程的苦逼生活 QWQ嘤嘤嘤(第一周) - 天冷吃冰棍儿

    2017-02-27 15:01

网友点评
<