リクエストごとにクラウドデータベースからユーザーをロードし、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>(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);
}
私はおそらくそこでそれをすることができますか?