我在我的 asp.net 核心应用程序中设置了一个中间件,以自动将控制器操作包装在事务中。
public async Task Invoke(HttpContext context, MyDataContext dbContext)
{
if (context.Request.Method == "GET")
{
await _next(context);
}
else
{
using (var transaction = await dbContext.Database.BeginTransactionAsync())
{
try
{
await _next(context);
transaction.Commit();
}
catch (Exception)
{
transaction.Rollback();
throw;
}
}
}
}
但是,我有一个不应该在事务中运行的控制器方法(将来可能会更多)。让控制器操作“退出”中间件功能的最佳方法是什么?
在控制器方法上放置像 [NoTransaction] 这样的自定义属性会很好。但是,我无法确定是否有任何方法可以从我的中间件的 Invoke() 方法中确定将调用哪个控制器操作(这将使我能够从该方法中提取属性并确定是否创建事务.) 正确的方法是什么?