【发布时间】:2017-03-29 22:31:44
【问题描述】:
我在我的 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() 方法中,将调用 which 控制器操作(这将使我能够从该方法中提取属性并确定是否创建交易。)这样做的正确方法是什么?
【问题讨论】:
标签: asp.net-core asp.net-core-middleware