В чем разница между методами OnActionExecuting и beginxecute? - PullRequest
0 голосов
/ 13 июля 2020

У меня есть специальный код, помещенный в метод BeginExecute, потому что мне нужно выполнить некоторый c logi, прежде чем любой метод действия будет выполнен на любом контроллере. Я видел, что BeginExecute часто выполняется автоматически без взаимодействия с приложением. Таким образом, это генерирует большой сетевой трафик c.

Итак, я решил переместить свой logi c из BeginExecute в OnActionExecuting, но я хотел бы знать, в чем разница между обоими методами, чтобы решить Если это правильное место, куда поместить мой лог c.

Вызывается ли OnActionExecuting каждый раз, когда выполняется BeginExecute?

Все мои контроллеры в моем приложении MVC наследуются от класса MyController.

Сначала у меня был код ниже:

namespace My.Controls
{
   public partial class MyController : Controller
   {
       protected override IAsyncResult BeginExecute(System.Web.Routing.RequestContext requestContext, AsyncCallback callback, object state)
       {
           IAsyncResult result = base.BeginExecute(requestContext, callback, state);
           // my logic here. Access to db to get information of the person currently logged in.
              
           return result;
       }
   }
}

Теперь я заменил его следующим:

namespace My.Controls
{
   public partial class MyController : Controller
   {
       protected override void OnActionExecuting(ActionExecutingContext filterContext)
       {
           base.OnActionExecuting(filterContext);

           // my logic here. Access to db to get information of the person currently logged in.
       }
   }
}

Моя проблема в том, что BeginExecute часто вызывается, даже если нет один использует приложение. Например, если я открываю свое приложение на вкладке браузера и оставляю его открытым, ничего не делая, я заметил, что время от времени часто вызывается BeginExecute. Я попытался отладить его, чтобы узнать, в чем он виноват. Я установил точку останова внутри BeginExecute, но единственная информация, которую я получаю из стека вызовов, - это строка, в которой говорится «Внешний код», а затем первый вызов - BeginExecute. Есть ли способ узнать, что именно представляет собой «Внешний код», который вызывает BeginExecute?

Я подумал, что, возможно, что-то в фоновом режиме генерирует запросы, не вызывая никаких действий в контроллере, поэтому я решил переместить эту часть код от BeginExecute до OnActionExecuting, чтобы этот код выполнялся только перед вызовом любого метода действия в контроллере. Поэтому я сомневаюсь: все вызовы BeginExecute всегда проходят через OnActionExecuting? или не обязательно?

...