【问题标题】:How to write custom filter for transaction management如何为事务管理编写自定义过滤器
【发布时间】:2016-11-15 16:52:58
【问题描述】:

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

  • 过滤器必须在Authorization Filter(我不知道 想明确使用order
  • 过滤器必须在操作方法内容之前打开事务
  • 无异常则必须提交事务,否则必须提交 执行 action 方法后回滚。

我认为的过滤器实现如下:

    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,并将其放入过滤器管道中。

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

【问题讨论】:

  • 您是否考虑过插入自定义中间件?
  • @DrSchizo 是的,我认为但在我的情况下使用中间件是不可行的(我认为是这样)。因为事务仅针对具有Command 属性的命令操作(我将更新我的问题)。
  • 我不确定你是否可以为此目的使用 AuthorizationFilter,因为它只在传入请求而不是传出响应上执行(但我不确定我是否正确,因为你可以写一个continuation 当使用 await 和 IAsyncAuthorizationFilter)。同样的方式结果过滤器的OnResourceExecuted 将在响应写入客户端后执行,所以我不确定你是否同意。如果我们把所有这些都放在一边,理想情况下,您希望交易窗口很小,而不是环绕多层。
  • 此外,您还需要处理异常情况和回滚
  • @KiranChalla 我不想使用AuthorizationFilter,我想使用任何过滤器,就像它的顺序一样(在所有过滤器之前)。您对Resource Filter 是对的,这对我的情况似乎不可行(我误解了它)。在这种情况下,似乎我唯一的选择是在过滤器构造函数中使用Action Filter 并设置顺序(可能是-1000)。谢谢。

标签: filter transactions asp.net-core asp.net-core-mvc entity-framework-core


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-31
    • 1970-01-01
    • 2019-01-03
    • 2013-02-05
    • 2013-01-15
    • 2012-08-09
    • 2012-07-21
    • 2013-10-18
    相关资源
    最近更新 更多