如何为事务管理编写自定义筛选器



我想使用过滤器来管理具有以下要求的交易。

  • 过滤器必须在Authorization Filter后立即执行(我不想要明确使用order
  • 筛选器必须在操作方法内容之前打开事务
  • 如果没有异常,则必须提交事务,否则必须执行操作方法后回滚。

我认为过滤器实现如下所示:

    private IDbContextTransaction _tx;
    private readonly MyDbContext _dbContext;
    public override void OnActionExecuting(ActionExecutingContext actionContext)
    {
        _tx = _dbContext.Database.BeginTransaction();
    }
    public override void OnActionExecuted(ActionExecutedContext context)
    {
        if (context.Exception == null)
        {
            _tx.Commit();
        }
        else
        {
            _tx.Rollback();
        }
    }

然后我想将其用于如下所示的命令操作:

    [HttpPost]
    [Command]
    public IActionResult Create([FromBody] CreateTodoCommand cmd)
    {
    }

根据文档:

资源筛选器是处理请求后的第一个筛选器 授权,以及最后一个在请求离开时触摸请求的人 筛选器管道。它们对于实现缓存或 否则,由于性能原因,滤波器管道短路。

在我的情况下使用似乎是可行的。如果没有其他解决方案,我会选择这个。另一方面,我想尝试编写我自己的自定义过滤器类型,如Authorization Filter并将其放入过滤器管道中。

问题:如何实现自定义过滤器?

您可以创建自定义属性并将其设置为您的操作。

using Microsoft.AspNetCore.Mvc.Filters;
    public class CustomActionFilter: Attribute, IActionFilter {
            public void OnActionExecuting(ActionExecutingContext context) {
    }
    }

最新更新