Tôi muốn có thể tải người dùng từ cơ sở dữ liệu đám mây theo từng yêu cầu và có sẵn trên yêu cầu trong bộ điều khiển bằng cách sử dụng asp.net mvc. Vấn đề là khung công tác hiện tại không hỗ trợ thực hiện các hoạt động không đồng bộ từ các bộ lọc hành động. Vì vậy, OnActionExecuting, OnAuthorization phương pháp không cho phép tôi làm điều này .. ví dụ tôi có đoạn mã sau mà không làm việc (do đó, không thử nó) .. Bạn nhận được một ngoại lệ: "Một mô-đun không đồng bộ hoặc xử lý hoàn thành trong khi một không đồng bộ hoạt động vẫn đang chờ xử lý. "Thực hiện hoạt động Async asp.net mvc bên ngoài hành động
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;
}
}
Vì vậy, có cách nào khác để có thể thực hiện việc này không? Tôi nhận thấy có một phương pháp bắt đầu thực hiện trong Bộ điều khiển cơ sở:
protected override IAsyncResult BeginExecute(RequestContext requestContext, AsyncCallback callback, object state)
{
return base.BeginExecute(requestContext, callback, state);
}
Tôi có thể làm điều đó ở đó không?
Bạn có thể [bỏ phiếu cho bộ lọc hành động không đồng bộ ở đây] (https://aspnet.codeplex.com/workitem/9582). –
Gần đây tôi đã [xuất bản một thư viện] (https://www.nuget.org/packages/Hydrogen.Extensions.Mvc5.Async) thêm hỗ trợ thích hợp cho các bộ lọc async (dựa trên mã nguồn từ [ASP.NET MVC Core] (https://github.com/aspnet/Mvc)). Nguồn cũng có sẵn tại đây: https://github.com/jdaigle/Hydrogen.Extensions.Mvc5. –