ASP.NET mvc4中的过滤器的使用(3)

namespace System.Web.Mvc{ // 摘要:定义结果筛选器所需的方法。 public interface IResultFilter{ // 摘要:在操作结果执行后调用。 // 参数:filterContext: // 筛选器上下文。 void OnResultExecuted(ResultExecutedContext filterContext); // 摘要:在操作结果执行之前调用。 // 参数:filterContext: // 筛选器上下文。 void OnResultExecuting(ResultExecutingContext filterContext); } }

动作方法如何返回动作结果,让用户能够将动作方法的意图与动作方法的执行分离。将结果过滤器运用于一个动作方法时会在动作方法返回结果时、但在执行该动作结果之前调用OnResultExecuting。动作结果执行之后调用OnResultExecuted

内建的动作过滤器和结果过滤器

Mvc框架包含一个内建的类,可以用来创建动作过滤器和结果过滤器,这个类的名称ActionFilterAttribute

namespace System.Web.Mvc{ // 摘要:表示筛选器特性的基类。 public abstract class ActionFilterAttribute : FilterAttribute, IActionFilter, IResultFilter{ // 摘要:在执行操作方法后由 ASP.NET MVC 框架调用。 // 参数:filterContext: // 筛选器上下文。 public virtual void OnActionExecuted(ActionExecutedContext filterContext); // 摘要:在执行操作方法之前由 ASP.NET MVC 框架调用。 // 参数:filterContext: // 筛选器上下文。 public virtual void OnActionExecuting(ActionExecutingContext filterContext); // 摘要:在执行操作结果后由 ASP.NET MVC 框架调用。 // 参数:filterContext: // 筛选器上下文。 public virtual void OnResultExecuted(ResultExecutedContext filterContext); // 摘要:在执行操作结果之前由 ASP.NET MVC 框架调用。 // 参数:filterContext: // 筛选器上下文。 public virtual void OnResultExecuting(ResultExecutingContext filterContext); } }

使用这个类的唯一好处是不需要重写和实现不打算使用的方法。除此之外,直接实现过滤器接口没有任何好处

自定义实例:

public class ProfileAllAttribute: ActionFilterAttribute{ private Stopwatch timer; public override void OnActionExecuting(ActionExecutingContext filterContext){ timer = Stopwatch.StartNew(); } public override void OnActionExecuted(ActionExecutedContext filterContext){ timer.Stop(); filterContext.HttpContext.Response.Write( string.Format("<div>Total elapsed time:{0}</div>", timer.Elapsed.TotalSeconds)); } } public class HomeController : Controller{ [ProfileAll] public ActionResult Index(){ return View();} }

其它过滤器属性:

public abstract class Controller : ControllerBase, IActionFilter, IAuthenticationFilter, IAuthorizationFilter, IDisposable, IExceptionFilter, IResultFilter, IAsyncController, IController, IAsyncManagerContainer

过滤器的几种实现形式:

①全局过滤器

在FilterConfig中直接注册实现类

②实现接口

③注解

对过滤器执行排序

过滤器是按类型执行的其顺序:授权-》Action-》result。如果有未处理异常,框架在任一阶段都会执行异常过滤器

namespace System.Web.Mvc { // 摘要:表示操作和结果筛选器特性的基类。 public abstract class FilterAttribute : Attribute, IMvcFilter{ // 摘要: 获取或设置一个值,该值指示是否可指定筛选器特性的多个实例。 // 返回结果:如果可指定筛选器特性的多个实例,则为 true;否则为 false。 public bool AllowMultiple { get; } // 摘要: 获取或者设置执行操作筛选器的顺序。 // 返回结果:执行操作筛选器的顺序。 public int Order { get; set; } } }

内建过滤器

过滤器

 

描述

 

RequireHttps

 

强迫Action使用Https协议

 

OutputCache

 

缓存一个Action的

 

ValidateInputand

ValidationAntiForgeryToken

 

与安全性有关的授权过滤器

 

AsyncTimeout

NoAsyncTimeout

 

用户异步控制器

 

ChildActionOnlyAttribute

 

一个支持Html.action和Html.RenderAction辅助器方法的过滤器

 
 

RequireHttps

RequireHttps过滤器让Action强制使用HTTPS协议。他将用户浏览器重定向到同一个动作,但使用‘https://'协议前缀

在形成不安全请求时,重写HandledNonHttpsRequest(),以创建自定义行为,该过滤器仅用于GET请求,POST则会丢掉数据;该过滤器时授权过滤器

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wdpxgd.html