MVC 中的动作过滤器 [过滤器类型与示例]

已发表: 2021-03-04

目录

ASP.NET MVC – 动作过滤器

在 MVC(模型-视图-控制器)过滤器中,我们根据 MVC 框架请求处理的不同功能或逻辑使用附加逻辑。

MVC 过滤器实现了不同级别的流程:例如,授权、日志记录和缓存。

我们可以将 Action 过滤器视为可以实现到控制器操作方法的属性,以根据业务逻辑进行修改。

我们可以考虑系统中的 MVC 过滤器。 属性定义为类、方法、属性和字段。

另请阅读: MVC 项目

ASP.NET MVC 框架包含各种动作过滤器

授权:此操作过滤器能够限制对特定用户角色的访问。

OutputCache :它是动作过滤器,在定义的时间内缓存控制器动作方法的结果。

HandleError :当这个控制器动作执行时,如果代码失败,它会处理特定场景中的错误。 它允许您创建自定义操作过滤器。

例如,我们可以创建自定义操作过滤器来执行自定义身份验证系统。

资源

请求和响应生命周期流程中的过滤管道:

资源

过滤器提供了两种在代码中实现逻辑的类别,它执行不同的接口定义-

  1. 同步
  2. 异步

同步过滤器

在 Synchronization 过滤器中,我们可以在管道处理时运行管道前后的代码; 我们可以将其视为OnStageExecutingOnStageExecuted操作方法。

异步过滤器

异步过滤器使用单一方法描述,该方法具有以下方法

  • OnAction执行
  • OnActionExecuted
  • OnActionExecutionAsync

下面的代码片段是声明的类型

公共类 TimestampFilter : IActionFilter, IAsyncActionFilter

{

公共无效OnActionExecuting (ActionExecutingContext 上下文)

{

context.ActionDescriptor.RouteValues[“timestamp”] = DateTime.Now.ToString();

}

公共无效OnActionExecuted (ActionExecutedContext 上下文)

{

var ts = DateTime.Parse(context.ActionDescriptor.RouteValues[“timestamp”]).AddHours(1).ToString();

context.HttpContext.Response.Headers[“X-EXPIRY-TIMESTAMP”] = ts;

}

公共异步任务OnActionExecutionAsync (ActionExecutingContext 上下文,ActionExecutionDelegate 下一个)

{

this.OnActionExecuting(context);

var resultContext = 等待下一个();

this.OnActionExecuted(resultContext);

}

}

MVC 中的动作过滤器类型

ASP.NET MVC 框架维护各种过滤器:

授权过滤器:执行 IAuthorisationFilter 属性。

动作过滤器:执行 IActionFilter 属性。

结果过滤器:执行 IResultFilter 属性。

异常过滤器:执行 IExceptionFilter 属性。

授权过滤器

我们可以将它用于用户的可访问性,我们可以在控制器中执行action方法之前声明它。

授权过滤器启用两个内置属性,例如:Authorize 和 AllowAnonymous

我们可以根据我们的业务需求在代码中的自定义逻辑中使用这些。

下面的代码片段是授权过滤器的示例

[授权]

公共 ActionResult SecureMethod()

{

返回视图();

}

[允许匿名]

公共 ActionResult NonSecureMethod()

{

返回视图();

}

公共 ActionResult SecureMethod()

{

返回视图();

}

动作过滤器

我们可以在执行操作方法之前和操作方法之后描述操作过滤器。

它包含两种类型的方法。

  1. OnActionExecuted
  2. OnAction执行

下面的代码片段是动作过滤器的示例

使用系统;

使用 System.Collections.Generic;

使用 System.Linq;

使用 System.Web;

使用 System.Web.Mvc;

命名空间 TutorialActionFilter.Filters

{

公共类 Myactionfilter : FilterAttribute,IActionFilter

{

公共无效OnActionExecuted (ActionExecutedContext filterContext)

{

if (filterContext.HttpContext.Session[“UserID”] != null)

{

filterContext.Result = newRedirectResult(“/Home/Index”);

}

别的

{

filterContext.Result = newRedirectResult(“/Login /Login”);

}

}

公共无效OnActionExecuting (ActionExecutingContext filterContext)

{

if (filterContext.HttpContext.Session[“UserID”] != null)

{

filterContext.Result = newRedirectResult(“/Home/Index”);

}

别的

{

filterContext.Result = newRedirectResult(“/Login /Login”);

}

}

}

}

[教程动作过滤器]

[AcceptVerbs(HttpVerbs.Get)]

公共 ActionResult GetPerson()

{

人 p = 新人 ();

返回视图(“人”,p);

}

结果过滤器

我们可以在执行动作方法之前和执行动作方法之后描述动作过滤器。

它包含两种类型的方法。

  1. OnResultExecuted
  2. OnResultExecuting

下面的代码片段是 Result Filters 的示例

使用系统;

使用 System.Collections.Generic;

使用 System.Linq;

使用 System.Web;

使用 System.Web.Mvc;

命名空间 ResultFilter.Filters

{

公共类 MyResultfilter : FilterAttribute,IResultFilter

{

公共无效 OnResultExecuted(ResultExecutedContext filterContext)

{

if (filterContext.HttpContext.Session[“UserID”] != null)

{

filterContext.Result = newRedirectResult(“/Home/Contact”);

}

别的

{

filterContext.Result = newRedirectResult(“/Login/Login”);

}

}

公共无效OnResultExecuting (ResultExecutingContext filterContext)

{

if (filterContext.HttpContext.Session[“UserID”] != null)

{

filterContext.Result = newRedirectResult(“/Home/Contact”);

}

别的

{

filterContext.Result = newRedirectResult(“/Login/Login”);

}

}

}

}

[我的结果过滤器]

[AcceptVerbs(HttpVerbs.Get)]

公共 ActionResult GetPerson()

{

人 p = newPerson ();

返回视图(“人”,p);

}

异常过滤器

当控制器或操作方法抛出异常时,我们可以使用它们。

这个异常过滤器对于捕获异常很重要。

下面是使用异常过滤器的代码片段

使用系统;

使用 System.Collections.Generic;

使用 System.Linq;

使用 System.Web;

使用 System.Web.Mvc;

命名空间 ExceptionFilter.Filters

{

公共类 MyExceptionFilter : FilterAttribute, IExceptionFilter

{

公共无效OnException (ExceptionContext filterContext)

{

filterContext.Controller.ViewBag.onExceptionError = “调用了ExceptionFilter过滤器”;

filterContext.HttpContext.Response.Write(“调用了ExceptionFilter过滤器”);

}

}

}

[我的异常过滤器]

公共类 HomeController : 控制器

{

[AcceptVerbs(HttpVerbs.Get)]

公共 ActionResult GetPerson()

{

人 p = newPerson ();

返回视图(“人”,p);

}

}

另请阅读: Java MVC 项目

从世界顶级大学在线学习软件课程获得行政 PG 课程、高级证书课程或硕士课程,以加快您的职业生涯。

结论

我们希望本文能帮助您了解 MVC 中的操作过滤器。

如果您有兴趣了解有关全栈开发的更多信息,请查看 upGrad 和 IIIT-B 的全栈软件开发执行 PG 计划,该计划专为在职专业人士设计,提供 500 多个小时的严格培训、9 个以上的项目,以及任务、IIIT-B 校友身份、实用的实践顶点项目和顶级公司的工作协助。

什么是编程中的数据结构?

数据结构是我们在程序中排列数据的方式。 两个最重要的数据结构是数组和链表。 数组是最熟悉的数据结构,也是最容易理解的。 数组基本上是相关项目的编号列表。 它们易于理解和使用,但在处理大量数据时效率不高。 链表更复杂,但如果使用得当,它们会非常有效。 当您必须在大列表中间添加或删除项目时,或者当您需要在大列表中搜索项目时,它们是不错的选择。

链表和数组有什么区别?

在数组中,索引用于访问元素。 数组中的元素按顺序组织,如果使用索引,则可以轻松访问和修改元素。 数组也有固定的大小。 元素是在创建时分配的。 在链表中,指针用于访问元素。 链表的元素不一定按顺序存储。 链表的大小未知,因为它可以在创建时包含节点。 指针用于访问元素,因此内存分配更容易。

C语言中的指针是什么?

指针是 C 中的一种数据类型,它存储任何变量或函数的地址。 它通常用作对另一个内存位置的引用。 指针可以保存数组、结构、函数或任何其他类型的内存地址。 C 使用指针向函数传递值和从函数接收值。 指针用于动态分配内存空间。