2013-04-18 1 views
2

Посмотрите на код ниже.ASP.NET MVC: вызов одного действия контроллера из другого, с применением ActionFilters

Когда Get() называет Foobar() и Foobaz(), в ActionFilter s, украшающие Foobar() и Foobaz() не вызываются.

Как я могу назвать эти два других действия контроллера в пределах Get() таким образом, который также вызывает выполнение фильтров и AnotherAction?

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() } 
     }); 
    } 
} 

ответ

4

Действия контроллера не предназначены для использования в качестве методов. Для правильной работы они должны быть вызваны в течение цикла запроса. Возможно, ваш пример слишком упрощен, но похоже, что вы пытаетесь использовать эти «действия» как стандартные методы. В то время как контроллер может технически имеет метод, который никогда не должен быть выставлен как маршрут, это не очень хорошая идея. Переместите логику в вашу модель или какой-то вспомогательный класс.

+0

К сожалению, весь этот код построен неправильно, и у меня нет возможности исправить и сделать все правильно. Я как-то должен делать то, что показано, даже если это означает, что 'Get()' должен программно генерировать два HTTP-запроса, каждый из которых разворачивает отдельные инстанции. :( – core

+2

Если вы абсолютно застряли в этом, я бы предложил обработать его как действие API и вытащить данные с помощью HttpClient или аналогичного. –