📜  MVC框架-动作过滤器

📅  最后修改于: 2020-10-21 04:51:08             🧑  作者: Mango


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