无涯教程-ASP.NET MVC - 过滤器

在ASP.NET MVC中,控制器定义的操作方法通常与用户交互具有一对一关系,但是有时您希望在调用操作方法之前或在操作方法运行之后执行某些操作

为此,ASP.NET MVC提供了过滤器(Filter), 过滤器是自定义类,它们提供声明性和程序性方式,以向控制器操作方法添加操作前和操作后行为。

Action 过滤器

Action filter是一种属性,您可以将其应用于控制器Action或整个控制器,以修改执行Action的方式, ASP.NET MVC框架包括几个Action过滤器-

  • OutputCache - 将控制器操作的输出缓存指定时间。

  • HandleError  - 处理执行控制器Action时引发的错误。

  • Authorize       - 使您可以限制对特定用户或角色的访问。

通过创建一个新的ASP.Net MVC项目,让我们看一个简单的示例。

步骤1 - 打开Visual Studio,然后单击File→New→Item菜单选项。

将打开一个" New Project"对话框。

New Project Menu Option

步骤2 - 在左侧窗格中,选择Template→Visual C#→Web。

步骤3 - 在中间窗格中,选择ASP.NET Web应用程序。

步骤4 - 在"Name"字段中输入项目名称MVCFiltersDemo,然后单击"OK"继续,您将看到以下对话框,要求您设置ASP.NET项目的初始内容。

MVCFiltersDemo

步骤5 - 为了简化操作,请选择"Empty"选项,然后在"Add folders and core references for"部分中选中" MVC"复选框,然后单击"OK"。

步骤6 - 要添加控制器,请右键单击Solution Explorer中的controller文件夹,然后选择Add→Controller。

它将显示"Add Scaffold"对话框。

Controller Add Scaffold Dialog

步骤7 - 选择" MVC 5 Controller-Empty"选项,然后单击"Add"按钮。

出现"Add Controller"对话框。

Add Controller Dialog

步骤8 - 将名称设置为HomeController,然后点击"Add"按钮。

您将在Controllers文件夹中看到一个新的C#文件" HomeController.cs",该文件也可以在Visual Studio中进行编辑。

应用 Action 过滤器

Action filter可以应用于单个控制器Action或整个控制器,如,将Action过滤器 OutputCache 应用于返回索引字符串的名为Index()的Action,此过滤器使操作返回的值被缓存15秒。

为了使这个示例可行,让我们使用以下代码通过更改名为 Index 的操作方法来修改控制器类。

using System;
using System.Collections.Generic;
using System.Linq;

using System.Web;
using System.Web.Mvc;

namespace MVCFiltersDemo.Controllers {
   public class HomeController : Controller{
      //GET: Home
      [OutputCache(Duration = 15)]
		
      public string Index(){
         return "This is ASP.Net MVC Filters Tutorial";
      }
   }
}

运行此应用程序时,您将看到浏览器正在显示Index操作方法的输出。

MVC Filters Tutorial

让我们添加另一种操作方法,该方法将显示当前时间。

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 ,您将收到以下输出。

Localhost GetCurrentTime

如果刷新浏览器,您将看到相同的时间,因为该操作被缓存了20秒, 20秒后刷新时,它将更新。

自定义过滤器

为了创建自己的自定义过滤器,ASP.NET MVC框架提供了一个称为ActionFilterAttribute的基类,此类同时实现IActionFilter和IResultFilter接口,并且都从Filter类派生。

通过使用ActionFilters在项目中创建一个新文件夹,让我们看一个简单的自定义过滤器示例,添加一个右键单击ActionFilters文件夹的类,然后选择"Add"→"Class"。

Custom Filter

在名称字段中输入" MyLogActionFilter",然后单击"Add"按钮。

此类将从 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(ActionExecutingContext filterContext){
         Log("OnActionExecuting", filterContext.RouteData);
      }
		
      public override void OnActionExecuted(ActionExecutedContext filterContext){
         Log("OnActionExecuted", filterContext.RouteData);
      }
		
      public override void OnResultExecuting(ResultExecutingContext filterContext){
         Log("OnResultExecuting", filterContext.RouteData);
      }
		
      public override void OnResultExecuted(ResultExecutedContext filterContext){
         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");
      }
   }
}

运行该应用程序,然后观察输出窗口。

Output Window

如上面的屏幕截图所示,处理Action的阶段记录到Visual Studio输出窗口中。

ASP.NET MVC - 过滤器 - 无涯教程网无涯教程网提供在ASP.NET MVC中,控制器定义的操作方法通常与用户交互具有一对一关系,但是有时您希...https://www.learnfk.com/asp.net_mvc/asp.net-mvc-filters.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ASP.NET MVC4开发指南》是一本介绍ASP.NET MVC4开发的指南性图书,也提供了该框架的源码示例供读者学习参考。 ASP.NET MVC4是一种基于模型-视图-控制器(MVC)架构设计的开发框架,它使开发人员能够更好地分离应用程序的不同组件,提高代码的可维护性和可测试性。《ASP.NET MVC4开发指南》从基础知识开始介绍,逐步深入,帮助读者了解该框架的核心概念和技术。 《ASP.NET MVC4开发指南》提供了丰富的源码示例,这些示例涵盖了框架的各个方面,包括控制器、视图、模型绑定、路由、过滤器、验证、部署等等。这些源码示例可以帮助读者更好地理解框架的使用方式,了解开发中的常见问题和解决方案。读者可以通过运行和调试这些源码示例,更好地掌握ASP.NET MVC4的开发技巧和最佳实践。 通过阅读《ASP.NET MVC4开发指南》的源码,并结合书中的说明和解释,读者可以学习到如何搭建一个完整的ASP.NET MVC4应用程序,如何处理请求和响应,如何进行数据绑定和验证,如何设计和调整路由规则,如何使用过滤器进行权限控制等等。这些知识和技能对于进行ASP.NET MVC4开发是非常重要的,能够帮助开发人员更高效地开发出高质量的Web应用程序。 总之,《ASP.NET MVC4开发指南》的源码提供了学习和实践ASP.NET MVC4开发的宝贵资源,读者可以通过阅读和运行源码,更好地理解框架的工作原理和使用方法,提高开发技能和水平。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值