各要求時にクラウドデータベースからユーザーをロードし、asp.net mvcを使用してコントローラの要求で利用できるようにしたいと考えています。問題は、現在のフレームワークがアクションフィルターから非同期操作を行うことをサポートしていないことです。だからOnActionExecuting、OnAuthorizationメソッドは私がこれを行うことを許可しません..例えば、私は(それを試していない)動作しない次のコードを持って..あなたは例外を取得する: "非同期モジュールまたはハンドラは非同期操作はまだ保留中でした。非同期操作asp.net mvcをアクションの外側で実行する
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;
}
}
他にもこれを行う方法はありますか?ベースコントローラーにbegin executeメソッドがあることに気付きました。
protected override IAsyncResult BeginExecute(RequestContext requestContext, AsyncCallback callback, object state)
{
return base.BeginExecute(requestContext, callback, state);
}
可能性はありますか?
[ここで非同期アクションフィルターに投票できます](https://aspnet.codeplex.com/workitem/9582)。 –
私は非同期フィルタ(ASP.NET MVCのコードに大きく基づいています)を適切にサポートするライブラリを最近公開しました(https://www.nuget.org/packages/Hydrogen.Extensions.Mvc5.Async)コア](https://github.com/aspnet/Mvc))。 ソースはhttps://github.com/jdaigle/Hydrogen.Extensions.Mvc5でも利用できます。 –