c# 属性和覆盖行为 asp.net mvc

标签 c# asp.net asp.net-mvc attributes

我有一个在 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/

相关文章:

c# - 无法合并 EF 中的两个函数结果

c# - 在我的 ASP.NET 代码隐藏中使用 StringBuilder 编写 HTML 是一个好习惯吗?

c# - 如何在 C# 中的 GridView 中隐藏页脚行

javascript - jQuery.validate 不适用于 ASP.NET Core

c# - LINQ 查询 C# ASP

asp.net-mvc - MvcSiteMapProvider 安装错误

asp.net-mvc - 将路线注册到 global.asax 的替代位置

asp.net-mvc - C# ASP.NET MVC : Find out whether GET or POST was invoked on controller action

c# - .NET Core 引用类型项目不工作

c# - 如何像很多游戏一样快速发送信息?