Ich möchte in der Lage sein, einen Benutzer aus einer Cloud-Datenbank bei jeder Anfrage zu laden und diese auf der Anfrage in einem Controller mit asp.net mvc verfügbar. Das Problem besteht darin, dass das aktuelle Framework keine asynchronen Vorgänge von Aktionsfiltern unterstützt. So OnActionExecuting, OnAuthorization Methoden erlauben mir dies nicht .. zum Beispiel habe ich den folgenden Code, der nicht funktioniert (also nicht versuchen) .. Sie erhalten eine Ausnahme: "Ein asynchrones Modul oder Handler während einer asynchronen abgeschlossen Operation war noch ausstehend. "Führen Sie Async-Vorgang asp.net MVC außerhalb der Aktion
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;
}
}
So gibt es eine andere Weise in der Lage zu sein, dies zu tun? Ich bemerke, es gibt eine begin execute-Methode in der Basis-Controller:
protected override IAsyncResult BeginExecute(RequestContext requestContext, AsyncCallback callback, object state)
{
return base.BeginExecute(requestContext, callback, state);
}
Könnte ich es dort möglicherweise tun?
können Sie [Abstimmung für async Aktionsfilter hier] (https://aspnet.codeplex.com/workitem/9582). –
Ich habe vor kurzem [eine Bibliothek veröffentlicht] (https://www.nuget.org/packages/Hydrogen.Extensions.Mvc5.Async), die die richtige Unterstützung für asynchrone Filter (stark auf Code aus [ASP.NET MVC Kern] (https://github.com/aspnet/Mvc)). Quelle ist auch hier verfügbar: https://github.com/jdaigle/Hydrogen.Extensions.Mvc5. –