34-控制器和Action级别的过滤器

可以在控制器上面 进行标注使用某个过滤器

控制器和Action的过滤器 需要实现一个特性类

比如ResultFilterAttribute

然后在里面 也可以实现OnResultExecuting

另外 还可以添加自定义的属性。

除了ResultFilterAttribute还包含

ActionFilterAttribute

ExecutionFilterAttribute

FormatFilterAttribute

ServiceFilterAttribute

TypeFilterAttribute

这些过滤特性

增加一个结果过滤器特性标注

public class FoxDevelopResultFilterAttribute : ResultFilterAttribute
{
    public string Val { set; get; }

    public FoxDevelopResultFilterAttribute()
    {
    }

    public void OnActionExecuted(ActionExecutedContext context)
    {
        //Action执行之后执行这里的代码 
    }

    public void OnActionExecuting(ActionExecutingContext context)
    {
        //Action执行之前执行这里的代码
    }
}

使用结果特性过滤器

[FoxDevelopResultFilter(Val = "www.FoxDevelop.COM")]
public IActionResult Index()
{
    return View();
}Code language: PHP (php)

ResultFilter 是先执行action 再执行两个方法的。

控制器类Controller的方法达到过滤的效果

其实我们可以重写基类控制器里面的的这两个方法 达到过滤的效果

//
// 摘要:
//     Called after the action method is invoked.
//
// 参数:
//   context:
//     The action executed context.
[NonAction]
public virtual void OnActionExecuted(ActionExecutedContext context);
//
// 摘要:
//     Called before the action method is invoked.
//
// 参数:
//   context:
//     The action executing context.
[NonAction]
public virtual void OnActionExecuting(ActionExecutingContext context);Code language: PHP (php)
public class BaseController : Controller
{
    public override void OnActionExecuted(ActionExecutedContext context)
    {
        base.OnActionExecuted(context);
        //Action执行之后执行这里的代码 
    }

    public override void OnActionExecuting(ActionExecutingContext context)
    {
        //Action执行之前执行这里的代码
    }
}

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注