Wykonaj operację Async mvc asp.net poza akcją

Chcę móc załadować użytkownika z bazy danych w chmurze na każde żądanie i mieć to dostępne na żądanie w kontrolerze przy użyciu asp.net mvc. Problem polega na tym, że obecny framework nie obsługuje wykonywania operacji asynchronicznych z filtrów akcji. Tak więc metody OnActionExecuting, OnAuthorization nie pozwalają mi tego zrobić. Na przykład mam następujący kod, który NIE DZIAŁA (więc nie próbuj tego). Otrzymujesz wyjątek: „Moduł asynchroniczny lub moduł obsługi został zakończony podczas asynchronicznego operacja wciąż trwała. ”

protected async override void OnAuthorization(AuthorizationContext filterContext)
{
  var user = filterContext.HttpContext.User;
  if (!user.Identity.IsAuthenticated)
  {
    HandleUnauthorizedRequest(filterContext);
    return;
  }

  using (var session = MvcApplication.DocumentStore.OpenAsyncSession())
  {
    User currentUser = await session.LoadAsync<User>(user.Identity.Name);
    if (currentUser == null)
    {
      HandleUnauthorizedRequest(filterContext);
      return;
    }

    filterContext.HttpContext.Items["User"] = currentUser;
  }
}

Czy jest jakiś inny sposób, aby to zrobić? Zauważam, że w podstawowym kontrolerze jest metoda rozpoczęcia wykonywania:

protected override IAsyncResult BeginExecute(RequestContext requestContext, AsyncCallback callback, object state)
{
  return base.BeginExecute(requestContext, callback, state);
}

Czy mogę tam to zrobić?

questionAnswers(1)

yourAnswerToTheQuestion