Web API 2 + MVC 5共享标识表

我有一个Web API和MVC5共享相同的身份表。 属于Web API的Context:

public partial class CrestfineContext: IdentityDbContext { public CrestfineContext(): base("WelbeckDatabase", throwIfV1Schema: false) { } protected override void OnModelCreating(DbModelBuilder builder) { builder.Conventions.Remove(); builder.Entity().ToTable("UserClaim").HasKey(r => r.Id); builder.Entity().ToTable("UserLogin").HasKey(l => l.UserId); builder.Entity().ToTable("Role").HasKey(r => r.Id); builder.Entity().ToTable("User").HasKey(r => new{ r.IDNumber, r.UserName}); builder.Entity().ToTable("User").HasKey(r => r.UserName); builder.Entity().ToTable("UserRole").HasKey(r => new { r.RoleId, r.UserId });/**/ } 

属于Web应用程序(MVC 5)的Context是:

 public partial class CrestfineContext : IdentityDbContext { public CrestfineContext() : base("name=WelbeckDatabase", throwIfV1Schema: false) { } protected override void OnModelCreating(DbModelBuilder builder) { builder.Conventions.Remove(); builder.Entity().ToTable("UserClaim").HasKey(r => r.Id); builder.Entity().ToTable("UserLogin").HasKey(l => l.UserId); builder.Entity().ToTable("Role").HasKey(r => r.Id); builder.Entity().ToTable("User").HasKey(r => new { r.IDNumber, r.UserName }); builder.Entity().ToTable("User").HasKey(r => r.UserName); builder.Entity().ToTable("UserRole").HasKey(r => new { r.RoleId, r.UserId }); } } 

}

登录到Web App(MVC)时,运行问题都是:

 var userManager = HttpContext.GetOwinContext().GetUserManager(); var authManager = HttpContext.GetOwinContext().Authentication; UserLogin user = await userManager.FindAsync(login_.Email, login_.Password); 

返回null …虽然可以使用相同的用户凭据登录Web API,但用户将获得身份validation

编辑

我的Web API用户模型:

 public partial class User : IdentityUser { public string FirstName { get; set; } public string LastName { get; set; } public string IDNumber { get; set; } public string Address { get; set; } public DateTime JoinDate { get; set; } } 

在我的MVC应用程序中的用户模型:

 public class UserLogin: IdentityUser { public string FirstName { get; set; } public string LastName { get; set; } public string IDNumber { get; set; } public string Address { get; set; } public DateTime JoinDate { get; set; } } 

UPDATE

我已经意识到我甚至无法从IdentityUser表中选择它返回null的数据,系统中的用户还有一个简单的查询:

  var usr = context.Users.Where(x => x.UserName == login_.Email).FirstOrDefault(); 

返回null。 但是,我可以执行其他任务。