Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core 通用存储库模式中的当前用户(ASP.NET标识)信息_Asp.net Core_Asp.net Identity_Repository Pattern - Fatal编程技术网

Asp.net core 通用存储库模式中的当前用户(ASP.NET标识)信息

Asp.net core 通用存储库模式中的当前用户(ASP.NET标识)信息,asp.net-core,asp.net-identity,repository-pattern,Asp.net Core,Asp.net Identity,Repository Pattern,例如,我在EF核心上下文上实现了通用存储库模式 public class GenericRepository<TEntity, TContext> : IGenericRepository<TEntity> where TEntity : EntityBase where TContext : DbContext { internal TContext context; internal Db

例如,我在EF核心上下文上实现了通用存储库模式

    public class GenericRepository<TEntity, TContext> : IGenericRepository<TEntity>
        where TEntity : EntityBase
        where TContext : DbContext
    {
        internal TContext context;
        internal DbSet<TEntity> dbSet;

        public GenericRepository(TContext context)
        {
            this.context = context;
            dbSet = context.Set<TEntity>();
        }

        public virtual TEntity GetById(long id)
        {
            return dbSet.Find(id);
        }

        public virtual void Insert(TEntity entity)
        { 
            entity.CreatedDate = DateTime.Now;
            dbSet.Add(entity);
        }

        //... additional methods removed for brevity
    }
    public abstract class EntityBase {
        public long Id { get; set; }
        public DateTime CreatedDate { get; set; }
        public string CreatedBy { get; set; }
        //... additional fields removed for brevity
    }
访问存储库中当前用户的不同方式有哪些,以便我可以在创建时将用户添加到实体中

        public virtual void Insert(TEntity entity)
        { 
            entity.CreatedBy = CurrentUser.Name; // TODO: get current user here?
            entity.CreatedDate = DateTime.Now;
            dbSet.Add(entity);
        }

感觉上我应该能够通过中间件和/或注入来实现这一点。

我认为,您应该将用户信息从控制器传递到存储库方法,或者在控制器内设置CreatedBy值,而不是存储库方法。此外,在我看来,您应该避免将存储库依赖于标识,并保持它的简单性和独立性


换句话说,在存储库中引用HttpContext.User.Identity不是一个好主意,而HttpContext属于表示层而不是数据层。

我认为,您应该将用户信息从控制器传递到存储库方法,或者在控制器内设置CreatedBy值,而不是存储库方法。此外,在我看来,您应该避免将存储库依赖于标识,并保持它的简单性和独立性


换句话说,在存储库中引用HttpContext.User.Identity不是一个好主意,而HttpContext属于表示层而不是数据层。

这取决于您使用什么进行身份验证。您使用的是JWT吗?我使用的是ASP.NET Identity和Cookies。这取决于您使用什么进行身份验证。您使用的是JWT吗?我使用的是ASP.NET标识,数据的审核要求意味着我需要记录谁创建和编辑了它。我知道您的意思,但正如我提到的,最好将模型中的数据传递到存储库,而不是存储库类中的访问标识(类或…)。将来使用这种方法,您可以更改身份验证库。对数据的审核要求意味着我需要保留创建和编辑它的人的记录。我知道您的意思,但正如我所提到的,最好将模型中的数据传递到存储库,而不是存储库类中的访问标识(类或…)。将来使用这种方法,您可以更改身份验证库。