Filter 如何编写用于事务管理的自定义筛选器
我想使用过滤器来管理具有以下要求的事务Filter 如何编写用于事务管理的自定义筛选器,filter,transactions,asp.net-core,asp.net-core-mvc,entity-framework-core,Filter,Transactions,Asp.net Core,Asp.net Core Mvc,Entity Framework Core,我想使用过滤器来管理具有以下要求的事务 筛选必须在授权筛选之后执行(我不知道) 要明确使用订单) 筛选器必须在操作方法内容之前打开事务 如果没有例外,则必须提交交易,否则必须提交 在执行操作方法后回滚 我认为过滤器实现如下所示: private IDbContextTransaction _tx; private readonly MyDbContext _dbContext; public override void OnActionExecuting(Acti
- 筛选必须在授权筛选之后执行(我不知道)
要明确使用
)订单
- 筛选器必须在操作方法内容之前打开事务
- 如果没有例外,则必须提交交易,否则必须提交 在执行操作方法后回滚
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)
{
}
根据文件:
资源筛选器是处理请求之后的第一个筛选器
授权,以及在请求离开时最后一个触摸请求的权限
过滤管道。它们对于实现缓存或缓存特别有用
否则,出于性能原因,应短路过滤器管道
在我的案例中使用它似乎是可行的。如果没有其他解决方案,我会选择这个。另一方面,我想尝试编写自己的自定义过滤器类型,如授权过滤器
,并将其放入过滤器管道中
问题:如何实现自定义过滤器 您可以创建自定义属性并将其设置为您的操作
using Microsoft.AspNetCore.Mvc.Filters;
public class CustomActionFilter: Attribute, IActionFilter {
public void OnActionExecuting(ActionExecutingContext context) {
}
}
不过,你有没有想过插入自定义中间件?@DrSchizo是的,我想,但在我的情况下,使用中间件是不可行的(我想是的)。因为事务仅用于具有
command
属性的命令操作(我将更新我的问题)。我不确定您是否可以为此使用AuthorizationFilter,因为它仅在传入请求上执行,而不在传出响应上执行(但我不确定我在这里是否正确,因为在使用wait withIAsyncAuthorizationFilter
时,您可以编写一个延续
).Result filter的OnResourceExecuted
在将响应写入客户端后将以同样的方式执行,因此我不确定您是否同意这一点。如果我们将所有这些放在一边,理想情况下您希望事务窗口较小,而不是环绕多个层。此外,您还需要注意异常情况滚滚back@KiranChalla我不想使用AuthorizationFilter
,我想使用任何过滤器,就像它的顺序一样(在所有过滤器之前)。你对资源过滤器是正确的它对我的情况似乎不可行(我误解了它)。在这种情况下,我唯一的选择似乎是在筛选器构造函数中使用设置顺序(可能是-1000)的操作筛选器
。谢谢。