У меня есть специальный код, помещенный в метод 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? или не обязательно?