在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(); } }
使用上面的代码,如果在操作执行期间发生任何错误,它将找到一个名为Error in的视图Views文件夹并将该页面呈现给用户.
授权
示例 : 仅允许授权用户登录该应用程序.
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(); } }
使用上面的代码,如果您尝试在不登录的情况下访问应用程序,则会抛出错误类似于以下屏幕截图中显示的那个.