【问题标题】:ASP.NET MVC: Call one controller action from another, with ActionFilters appliedASP.NET MVC:从另一个控制器调用一个控制器动作,并应用 ActionFilters
【发布时间】:2013-04-19 02:16:02
【问题描述】:

看看下面的代码。

Get() 调用Foobar()Foobaz() 时,不会调用装饰Foobar()Foobaz()ActionFilters。

如何在Get() 中调用这两个控制器操作,同时导致SomeActionAnotherAction 过滤器执行?

public class Features : Controller
{
    [SomeAction]
    public bool Foobar(string id = null)
    {
        return true;
    }

    [AnotherAction]
    public bool Foobaz()
    {
        return false;
    }

    public JsonResult Get()
    {
        return this.JsonResult(new Dictionary<string, bool>() 
        {
            { "foobar", this.Foobar() },
            { "foobaz", this.Foobaz() }
        });
    }
}

【问题讨论】:

    标签: asp.net-mvc action-filter asp.net-mvc-controller


    【解决方案1】:

    控制器动作不应该用作方法。为了使它们正常运行,必须在请求周期内调用它们。也许您的示例过于简单,但看起来您正试图将这些“操作”用作标准方法。虽然控制器可以技术上拥有一个实际上从未打算公开为路由的方法,但做这种事情并不是一个好主意。将逻辑移到您的模型或一些辅助类中。

    【讨论】:

    • 不幸的是,所有这些代码都是错误的,我没有机会纠正和做正确的事情。我必须以某种方式执行所显示的操作,即使这意味着Get() 必须以编程方式生成两个 HTTP 请求,每个请求都启动独立的控制器实例。 :(
    • 如果您完全不习惯这样做,我建议您将其视为 API 操作并使用 HttpClient 或类似名称提取数据。
    猜你喜欢
    • 2010-09-29
    • 1970-01-01
    • 2016-04-30
    • 2011-08-11
    • 2013-05-28
    • 2015-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多