Выполнить асинхронную операцию asp.net mvc вне действия
Я хочу иметь возможность загружать пользователя из облачной базы данных по каждому запросу и иметь это доступным по запросу в контроллере с использованием asp.net mvc. Проблема в том, что текущая структура не поддерживает выполнение асинхронных операций из фильтров действий. Поэтому методы OnActionExecuting, OnAuthorization не позволяют мне сделать это .. например, у меня есть следующий код, который не работает (так что непопробуйте) Вы получаете исключение:Асинхронный модуль или обработчик завершены, пока асинхронная операция еще не завершена ".
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.Identity.Name);
if (currentUser == null)
{
HandleUnauthorizedRequest(filterContext);
return;
}
filterContext.HttpContext.Items["User"] = currentUser;
}
}
Так есть ли другой способ сделать это? Я заметил, что в базовом контроллере есть метод begin execute:
protected override IAsyncResult BeginExecute(RequestContext requestContext, AsyncCallback callback, object state)
{
return base.BeginExecute(requestContext, callback, state);
}
Могу ли я сделать это там, возможно?