MVC 框架 - 动作过滤器

在 ASP.NET MVC 中,控制器定义动作方法,这些动作方法通常与 UI 控件具有一对一关系,例如单击按钮或链接等。例如,在我们之前的示例中,UserController 类包含方法 UserAdd、UserDelete 等。

但是,很多时候我们希望在特定操作之前或之后执行某些操作。为了实现此功能,ASP.NET MVC 提供了一项功能,可以在控制器的动作方法上添加操作前和操作后行为。

过滤器类型

ASP.NET MVC 框架支持以下动作过滤器 −

  • 动作过滤器 − 动作过滤器用于实现在控制器动作执行之前和之后执行的逻辑。在本章中,我们将详细介绍操作过滤器。

  • 授权过滤器 − 授权过滤器用于实现控制器操作的身份验证和授权。

  • 结果过滤器 − 结果过滤器包含在执行视图结果之前和之后执行的逻辑。例如,您可能希望在视图呈现到浏览器之前修改视图结果。

  • 异常过滤器 − 异常过滤器是最后运行的过滤器类型。您可以使用异常过滤器来处理由控制器操作或控制器操作结果引发的错误。您还可以使用异常过滤器来记录错误。

操作过滤器是最常用的过滤器之一,用于执行额外的数据处理,或操纵返回值或取消操作的执行或在运行时修改视图结构。

操作过滤器

操作过滤器是可应用于控制器部分或整个控制器的附加属性,用于修改执行操作的方式。这些属性是从 System.Attribute 派生的特殊 .NET 类,可以附加到类、方法、属性和字段。

ASP.NET MVC 提供以下操作过滤器 −

  • 输出缓存 − 此操作过滤器将控制器操作的输出缓存指定的时间。

  • 处理错误 −此操作过滤器处理控制器操作执行时引发的错误。

  • 授权 − 此操作过滤器使您能够限制对特定用户或角色的访问。

现在,我们将看到在示例控制器 ActionFilterDemoController 上应用这些过滤器的代码示例。(ActionFilterDemoController 仅用作示例。您可以在任何控制器上使用这些过滤器。)

输出缓存

示例 − 指定要缓存 10 秒的返回值。

public class ActionFilterDemoController : Controller { 
   [HttpGet] 
   OutputCache(Duration = 10)] 
   
   public string Index() { 
      return DateTime.Now.ToString("T");  
   } 
}

处理错误

示例 − 当控制器触发错误时,将应用程序重定向到自定义错误页面。

[HandleError] 
public class ActionFilterDemoController : Controller { 
   
   public ActionResult Index() { 
      throw new NullReferenceException(); 
   }  
   
   public ActionResult About() { 
      return View(); 
   } 
} 

使用上述代码,如果在操作执行期间发生任何错误,它将在 Views 文件夹中找到名为 Error 的视图并将该页面呈现给用户。

授权

示例 − 仅允许授权用户登录应用程序。

public class ActionFilterDemoController: Controller { 
   [Authorize] 
   
   public ActionResult Index() { 
      ViewBag.Message = "This can be viewed only by authenticated users only"; 
      return View(); 
   }  
   
   [Authorize(Roles="admin")] 
   public ActionResult AdminIndex() { 
      ViewBag.Message = "This can be viewed only by users in Admin role only"; 
      return View(); 
   } 
}

使用上述代码,如果您尝试在未登录的情况下访问应用程序,它将引发类似于以下屏幕截图所示的错误。

MVC Authorize Filter