MVC 框架 - 操作过滤器


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

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

过滤器的类型

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 授权过滤器