一、ASP.NET MVC 过滤器
ASP.NET MVC框架支持四种不同类型的过滤器:
-
-
授权过滤器 - 实现IAuthorizationFilter属性。
-
动作过滤器 - 实现IActionFilter属性。
-
结果过滤器 - 实现IResultFilter属性。
-
异常过滤器 - 实现IExceptionFilter属性。
-
namespace MVCFiltersDemo.Controllers{ public class HomeController : Controller{ // GET: Home [OutputCache(Duration = 15)] public string Index(){ return "This is ASP.Net MVC Filters Tutorial"; } [OutputCache(Duration = 20)] public string GetCurrentTime(){ return DateTime.Now.ToString("T"); } } }
请求以下URL http:// localhost:62833 / Home / GetCurrentTime,您将收到以下输出。
如果刷新浏览器,您将看到相同的时间,因为该操作缓存了20秒。20秒后刷新时会更新。
自定义过滤器
要创建自己的自定义过滤器,ASP.NET MVC框架提供了一个称为ActionFilterAttribute的基类。该类实现了IActionFilter和IResultFilter接口,并且都从Filter类派生。
让我们来看一下简单的自定义过滤器示例,方法是在ActionFilters的项目中创建一个新的文件夹。添加一个类,右键单击ActionFilters文件夹,然后选择添加→类。
在名称字段中输入“MyLogActionFilter”,然后单击“添加”按钮。
该类将派生自ActionFilterAttribute,它是一个基类,并覆盖以下方法。以下是MyLogActionFilter的完整实现。
using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.Routing; namespace MVCFiltersDemo.ActionFilters { public class MyLogActionFilter : ActionFilterAttribute{ public override void OnActionExecuting(ResultExecutingContextfilterContext){ Log("OnActionExecuting", filterContext.RouteData); } public override void OnActionExecuted(ActionExecutedContextfilterContext){ Log("OnActionExecuted", filterContext.RouteData); } public override void OnResultExecuting(ResultExecutingContextfilterContext){ Log("OnResultExecuting", filterContext.RouteData); } public override void OnResultExecuted(ResultExecutedContextfilterContext){ Log("OnResultExecuted", filterContext.RouteData); } private void Log(string methodName, RouteData routeData){ var controllerName = routeData.Values["controller"]; var actionName = routeData.Values["action"]; var message = String.Format( "{0} controller:{1} action:{2}", methodName, controllerName, actionName); Debug.WriteLine(message, "Action Filter Log"); } } }
现在让我们使用以下代码将日志过滤器应用于HomeController。
using MVCFiltersDemo.ActionFilters; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace MVCFiltersDemo.Controllers { [MyLogActionFilter] public class HomeController : Controller{ // GET: Home [OutputCache(Duration = 10)] public string Index(){ return "This is ASP.Net MVC Filters Tutorial"; } [OutputCache(Duration = 10)] public string GetCurrentTime(){ return DateTime.Now.ToString("T"); } } }
运行应用程序,然后观察输出窗口。
如上图所示,处理动作的阶段将记录到Visual Studio输出窗口中。
标签:ASP,Log,筑基,System,过滤器,using,大圆满,public From: https://www.cnblogs.com/DinAction/p/17468729.html