我有一个在 onactionexecuted 方法中执行提交的事务属性。
这是在 Controller 方法中指定的,对于我的一个操作,我需要覆盖该方法而不是调用 onactionexecuted 中的代码?
这是一些示例代码。
[Transaction]
public class TestController
{
public ActionResult Index()
{
return View();
}
[NoTransaction]
public ActionResult Test()
{
return View();
}
}
[NoTransaction] 属性应该覆盖 [Transaction] 中的 onactionexecuted 方法。 有办法做到这一点吗?
最佳答案
所有 Action 过滤器都有一个顺序属性。如果未定义,则它的隐含值为 -1。当过滤器具有相同的顺序时,顺序由范围决定:是应用于 Controller 还是应用于操作。
相同顺序的 Controller 作用域过滤器在相同顺序的操作过滤器之前运行。
在这种情况下,简单的解决方法是对事务属性应用显式排序。
[Transaction(Order=1)]
public class TestController
{
public ActionResult Index()
{
return View();
}
[NoTransaction(Order=0)]
public ActionResult Test()
{
return View();
}
}
这将确保 NoTransaction 在 Transaction 之前运行。
如果您希望 NoTransaction 覆盖 Transaction,最简单的做法是让 NoTransaction 在 HttpContext.Items 中添加一些特殊键,Transaction 属性读取这些键。此键的存在将告诉 Transaction 属性不要执行任何操作。
关于c# 属性和覆盖行为 asp.net mvc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2053355/