Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.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
C# 使用现有数据库名称验证实现OWIN?_C#_Asp.net_Owin - Fatal编程技术网

C# 使用现有数据库名称验证实现OWIN?

C# 使用现有数据库名称验证实现OWIN?,c#,asp.net,owin,C#,Asp.net,Owin,我希望按照以下示例实现OWIN: 然而,由于这种工作方式对我来说是新的,尤其是使用我自己创建的数据库,我希望得到一些指导。 我可以毫无问题地提交我的注册申请 这篇文章把我带到AccountController: [AllowAnonymous] [Route("Register")] public async Task<IHttpActionResult> Register(RegisterBindingModel model) {

我希望按照以下示例实现OWIN:

然而,由于这种工作方式对我来说是新的,尤其是使用我自己创建的数据库,我希望得到一些指导。 我可以毫无问题地提交我的注册申请

这篇文章把我带到AccountController:

    [AllowAnonymous]
    [Route("Register")]
    public async Task<IHttpActionResult> Register(RegisterBindingModel model)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

        try { 
            var email = model.Email;
            var password = model.Password;

            var user = new users() {
                 Email = email,
                 PasswordHash = password,
                 Password = password
            };

            IdentityResult result = await UserManager.CreateAsync(user, model.Password);

            if (!result.Succeeded)
            {
                return GetErrorResult(result);
            }

            return Ok();
        }
        catch(Exception ex)
        {
            throw;
        }
    }
即使我在任何地方都不用名字?!这个名字来自哪里

所以我假设我做错了什么,但是如果没有一个关于如何在现有数据库中实现OWIN的清晰解释,就很难进行调试

在我的上下文/实体和用户表下方,我希望使用该表存储我的用户数据

背景:

public partial class DaumAuctionEntities : IdentityDbContext<users>
{
    public DaumAuctionEntities()
        : base("name=DaumAuctionEntities")
    {
    }

    public DbSet<addresses> addresses { get; set; }
    public DbSet<auctions> auctions { get; set; }
    public DbSet<images> images { get; set; }
    public DbSet<users> users { get; set; }
}
编辑二: 我在教程代码中也有这个问题!这只是.NET中的一个奇怪的bug

编辑三 我试图做一个覆盖,正如你在上面的部分类用户中看到的那样。但我仍然有同样的错误


问题的原因是,在调用UserManager.CreateAsync之前,我没有向新用户添加用户名。如果我添加用户名,我会遇到与此完全相同的问题:


这个问题似乎指向这样一个事实:ASP.NET Identity在查询中使用了
UserName
属性,但实体框架认为该属性没有映射到实体模型(EDML)中的数据库列。

我认为您的代码没有太多问题

  • 从DaumActionEntities类中删除用户数据库集(请参阅)
  • 从用户类中删除Id属性
  • 在注册表中创建新用户时设置CreatedDate属性 方法
  • 那你应该没事了

    此外,关于:


    不,它实际上通过了。我相信是经理说的,但是 每当我试图调试该代码时,调试器都会声明它已跳转 超过它(很可能是因为它是一个外部库 来自微软)


    如果您使用try/catch来结束呼叫,您将能够看到错误消息

    我对您在此处共享的代码有一些问题,但与您提到的不完全相同。我已经在git上分享了这个示例,供您参考。你自己试试看,如果你发现任何问题,请告诉我

    Git URL-

    看,代码仍然与您的相同:

    var email=model.email; var password=model.password

            var user = new users()
            {
                Email = email,
                PasswordHash = password,
                Password = password
            };
    
            IdentityResult result = await UserManager.CreateAsync(user, model.Password);
    
            if (!result.Succeeded)
            {
                return GetErrorResult(result);
            }
    
            return Ok();
    

    我终于让它工作了

    最后,我不得不添加并调整部分类用户(这是我的SQL数据库中的一个表),以便用户名和密码覆盖IDentityUser的字段(不像我在问题中所做的那样):

    然后,在创建用户时,我只需传递密码和用户名:

            var user = new users() {
                 Email = email,
                 UserName = email, 
                 PasswordHash = password,
                 Password = password
            };
    

    您可以提交您的
    DbContext
    ApplicationUser
    代码吗?为什么要添加
    ID
    电子邮件
    密码
    ?通过从
    IdentityUser
    继承,您的用户对象已具有。另外,您何时以及在哪一行收到错误?问题是因为在调用UserManager.CreateAsync之前,我没有向新用户添加用户名。如果我添加用户名,我会遇到与此完全相同的问题:“名称不能为null或空。”来自
    If(!ModelState.IsValid)
    ?不,它实际上传递了该问题。它来自于我相信经理,但每当我尝试调试代码时,调试器都会声明它跳过了它(很可能是因为它是Microsoft的外部库)。但是用户名和电子邮件都是我从IdentityDbContext使用的字段,IdentityDbContext有这两个字段,因此它们应该存在,否?字段存在于实体类型(例如
    用户
    )中,而不是上下文类型(例如
    IdentityContext
    )。是的,很抱歉,应该是“IdentityUser”。我正在使用来自IdentityUser的电子邮件和用户名。您需要明确地映射它们;实体框架会忽略从基类继承的映射。如何将IdentityUser字段映射到自己的实体?以公共部分类用户为基础,谢谢,一有时间我就去看看!
    public partial class DaumAuctionEntities : IdentityDbContext<users>
    {
        public DaumAuctionEntities()
            : base("name=DaumAuctionEntities")
        {
        }
    
        public DbSet<addresses> addresses { get; set; }
        public DbSet<auctions> auctions { get; set; }
        public DbSet<images> images { get; set; }
        public DbSet<users> users { get; set; }
    }
    
    public partial class users : IdentityUser
    {
        public override string UserName
        {
            get
            {
                return Email;
            }
            set
            {
                Email = value;
            }
        }
    
        override public string PasswordHash
        {
            get
            {
                return Password;
            }
    
            set
            {
                Password = value;
            }
        }
    
        public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<users> manager, string authenticationType)
        {
            // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
            var userIdentity = await manager.CreateIdentityAsync(this, authenticationType);
            // Add custom user claims here
            return userIdentity;
        }
    }
    
    public partial class users
    {
        public int Id { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public System.DateTime CreatedDate { get; set; }
        public Nullable<System.DateTime> ModifiedDate { get; set; }
    
    }
    
    "The specified type member 'UserName' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported."
    
            var user = new users()
            {
                Email = email,
                PasswordHash = password,
                Password = password
            };
    
            IdentityResult result = await UserManager.CreateAsync(user, model.Password);
    
            if (!result.Succeeded)
            {
                return GetErrorResult(result);
            }
    
            return Ok();
    
    public partial class users
    {
        public int Id { get; set; }
        public string UserName {get; set; }
        public string Password { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }    
        public DateTime? CreatedDate { get; set; }
        public DateTime? ModifiedDate { get; set; }
    }
    
            var user = new users() {
                 Email = email,
                 UserName = email, 
                 PasswordHash = password,
                 Password = password
            };