【问题标题】:Method ActionFilterAttribute before controller ActionFilterAttribute控制器 ActionFilterAttribute 之前的方法 ActionFilterAttribute
【发布时间】:2026-01-17 06:40:01
【问题描述】:

如何在控制器ActionFilterAttribute之前运行方法ActionFilterAttribute

例子:

[Transaction(Order = 20)]
public class BaseController : Controller
    {
...
}

public class Test{} : BaseController {

[HttpPost]
        [WorkReportAccountsSettlementCreatedByCompanyDomainEvent]
        public virtual JsonResult Create(CreateStudentsWorkReportsListOverviewFormModel model)
        {
...
}

}

问题是TransactionAttribute总是在WorkReportAccountsSettlementCreatedByCompanyDomainEventAttribute之前执行

为什么?我要对面...

【问题讨论】:

    标签: c# asp.net-mvc-4


    【解决方案1】:

    为什么TransactionAttributeWorkReportAccountsSettlementCreatedByCompanyDomainEventAttribute之前执行是因为第一个的顺序较低。 您可以查看MSDN page,其中描述了所有过滤器的顺序。

    如果您查看FilterScope 枚举,您将看到以下内容:

    public enum FilterScope 
    {
        First = 0,
        Global = 10,
        Controller = 20,
        Action = 30,
        Last = 100,
    }
    

    表示即使你设置了Order = 20,它仍然会在之前执行,因为Action = 30

    【讨论】:

    • 现在我设置了 [Transaction(Order = 80)] 但仍然在 WorkReportAccountsSettlementCreatedByCompanyDomainEvent 之前执行。 Action 是 30,所以之前应该是 WorkReportAccountsSettlementCreatedByCompanyDomainEvent 但不是
    • 尝试指定[WorkReportAccountsSettlementCreatedByCompanyDomainEventAttribute(Order = 81)]
    • 我试过但还是一样。 TransactionAttribute 仍然在 WorkReportAccountsSettlementCreatedByCompanyDomainEventAttribute 之前执行我没有更多的想法:(