Asp.net mvc asp.net mvc core在第一个操作完成之前,在上下文上启动了第二个操作

Asp.net mvc asp.net mvc core在第一个操作完成之前,在上下文上启动了第二个操作,asp.net-mvc,asynchronous,async-await,task,Asp.net Mvc,Asynchronous,Async Await,Task,我使用此代码对控制器进行授权 使用[授权(Policy=“CustomRole”)] 事情发生了,在3或4次请求之后,它失败了 在上一个操作完成之前,在此上下文上启动了第二个操作 public class CustomRoleRequirement : AuthorizationHandler<CustomRoleRequirement>, IAuthorizationRequirement { public CMSContext _context = new CMSCon

我使用此代码对控制器进行授权

使用
[授权(Policy=“CustomRole”)]

事情发生了,在3或4次请求之后,它失败了

在上一个操作完成之前,在此上下文上启动了第二个操作

 public class CustomRoleRequirement : AuthorizationHandler<CustomRoleRequirement>, IAuthorizationRequirement
{
    public CMSContext _context = new CMSContext();
    protected override  Task HandleRequirementAsync(AuthorizationHandlerContext context, CustomRoleRequirement requirement)
    {

        var routeobj = context.Resource as Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext;
        var c = routeobj.RouteData.Values.Values.ToList();

        var keys = routeobj.RouteData.Values.Keys.ToList();
        string area = "";
        string id = "";
        string controller = "";
        string action = "";
        string module = "";
        foreach (var item in keys)
        {                       
            if (item=="area")
            {
                int indexs = keys.FindIndex(cc => cc == "area");
                area = c[indexs].ToString();
            }
            else if (item == "id")
            {
                int indexs = keys.FindIndex(cc => cc == "id");
                id = c[indexs].ToString();
            }
            else if (item == "controller")
            {
                int indexs = keys.FindIndex(cc => cc == "controller");
                controller = c[indexs].ToString();
            }
            else if (item == "module")
            {
                int indexs = keys.FindIndex(cc => cc == "module");
                module = c[indexs].ToString();
            }
            else  if (item == "action")
            {
                int indexs = keys.FindIndex(cc => cc == "action");
                action = c[indexs].ToString();
            }
        }

        string modulelink = controller;

        if (!string.IsNullOrEmpty(module))
        {
            modulelink = modulelink + "/" + module; 
        }

        List<string> Roles = new List<string>();
        int UserId = Auth.UserID;
        string UserName = Auth.UserName;
        if (UserName == "superadmin")
        {
            context.Succeed(requirement);
            return Task.CompletedTask;
        }
        else
        {
// apparently the error occurred here

            var moduleobj = _context.AppModules.FirstOrDefault(q => q.Link == modulelink);
            if (moduleobj != null)
            {  // 69 role is assessing news module
               //60 role is accessing page module
                var RolesModulesobj = _context.AppRolesModules.FirstOrDefault(q => q.ModuleId == moduleobj.ModuleId && q.RolesId == Auth.RoleId);
                if (RolesModulesobj != null)
                {
                    string permissionsobj = RolesModulesobj.Permissions;
                    List<string> PermissionsListobj = permissionsobj.Split(',').Select(x => x.Trim()).ToList();

                    var FindFullAccess = PermissionsListobj.FirstOrDefault(q => q.Contains("FullAccess:true"));
                    if (FindFullAccess != null)
                    {

                        context.Succeed(requirement);
                        return Task.CompletedTask;
                    }
                    else
                    {
                        var abc = PermissionsListobj.FirstOrDefault(q => q.Contains(action + ":true"));
                        if (abc != null)
                        {
                            context.Succeed(requirement);
                            return Task.CompletedTask;
                        }
                        else
                        {
                            context.Fail();
                            return Task.CompletedTask;
                        }
                    }
                }
            }
        }

如何使任务在上述方法中启动第二个操作之前等待?

不能使用单例数据库上下文。如果我没有在我的应用程序中使用db上下文的依赖项注入,您可以在每次需要时创建一个。如何每次都创建一个瞬态db请求?你能指出一些事情吗?如果你注入池,你应该没有问题。如果注入上下文,可以将其更改为注入上下文工厂。这也适用于池上下文。
 var moduleobj = _context.AppModules.FirstOrDefault(q => q.Link == modulelink);