MVC 中的动作过滤器 [过滤器类型与示例]
已发表: 2021-03-04目录
ASP.NET MVC – 动作过滤器
在 MVC(模型-视图-控制器)过滤器中,我们根据 MVC 框架请求处理的不同功能或逻辑使用附加逻辑。
MVC 过滤器实现了不同级别的流程:例如,授权、日志记录和缓存。
我们可以将 Action 过滤器视为可以实现到控制器操作方法的属性,以根据业务逻辑进行修改。
我们可以考虑系统中的 MVC 过滤器。 属性定义为类、方法、属性和字段。
另请阅读: MVC 项目
ASP.NET MVC 框架包含各种动作过滤器
授权:此操作过滤器能够限制对特定用户角色的访问。
OutputCache :它是动作过滤器,在定义的时间内缓存控制器动作方法的结果。
HandleError :当这个控制器动作执行时,如果代码失败,它会处理特定场景中的错误。 它允许您创建自定义操作过滤器。
例如,我们可以创建自定义操作过滤器来执行自定义身份验证系统。
资源
请求和响应生命周期流程中的过滤管道:
资源
过滤器提供了两种在代码中实现逻辑的类别,它执行不同的接口定义-
- 同步
- 异步
同步过滤器
在 Synchronization 过滤器中,我们可以在管道处理时运行管道前后的代码; 我们可以将其视为OnStageExecuting和OnStageExecuted操作方法。
异步过滤器
异步过滤器使用单一方法描述,该方法具有以下方法
- 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()
{
返回视图();
}
动作过滤器
我们可以在执行操作方法之前和操作方法之后描述操作过滤器。
它包含两种类型的方法。
- OnActionExecuted
- 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);
}
结果过滤器
我们可以在执行动作方法之前和执行动作方法之后描述动作过滤器。
它包含两种类型的方法。
- OnResultExecuted
- 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 使用指针向函数传递值和从函数接收值。 指针用于动态分配内存空间。