Каков порядок выполнения в ASP.NET MVC Controller? - PullRequest
0 голосов
/ 25 марта 2010

Скажем, у меня есть контроллер под названием "HomeController", который наследуется от Mvc.Controller. Также, скажем, я написал конструктор контроллера и несколько фильтров для некоторых действий.

Public Class ClientController
    Inherits System.Web.Mvc.Controller

    Public Sub New()
        ''Some code
    End Sub

    <SomeActionFilter()> _
    Function Index() As ActionResult
        Return View()
    End Function
End Class

Мои вопросы:

  1. Каков порядок выполнения конструктора, фильтра, действия?
  2. Могу ли я иметь фильтр для конструктора, если я не хочу запускать в нем код, проверяя некоторые условия?

1 Ответ

2 голосов
/ 25 марта 2010

Конструктор пойдет первым. В зависимости от типа фильтра, либо фильтр, либо метод действия будут выполняться вторыми. Смотрите здесь для типов фильтров .

Фильтр не перехватывает конструктор. Если вы хотите управлять вызовом конструктора Controller, вам нужно создать собственную фабрику контроллеров, реализовав IControllerFactory (или DefaultControllerFactory) и зарегистрировать ее с ControllerBuidler, например ControllerBuilder.Current.SetControllerFactory(typeof(MyControllerFactory)) при запуске приложения.

если я не хочу запускать код в нем проверяя некоторые условия?

Не можете ли вы написать этот код непосредственно в конструкторе (например, условие проверки в базовом контроллере для повторного использования)? Зачем вам фильтр в этом случае?

...