我的解决方案由3个项目组成,第一个是数据访问层(其中定义了模型和数据库上下文),另外两个是Asp.net MVC 5和Asp.net Web Api 2项目。
对于身份验证和授权,我使用Asp.net Identity,我已经这样设置了它(在我的DAL项目中):
public class DatabaseContext : IdentityDbContext<User>
{
public DatabaseContext()
: base("DefaultConnection")
{
Configuration.LazyLoadingEnabled = true;
}
public DbSet<IdentityUser> IdentityUsers { get; set; }
/*
Other DbSets ...
*/
}
My User类扩展了IdentityUser。
在我的ASP.net项目中,我更改了一个位帐户控制器,使其与我的数据库上下文一起工作,以下是我更改的相关部分:
[Authorize]
public class AccountController : Controller
{
public AccountController()
: this(new UserManager<User>(new UserStore<User>(new DatabaseContext())))
{
}
public AccountController(UserManager<User> userManager)
{
UserManager = userManager;
}
public UserManager<User> UserManager { get; private set; }
}
这部分工作得很好。所以我的问题是,为了让我的Web API项目与我的实体用户和数据库上下文一起工作,我必须做什么更改,所以为了使用API用户必须登录?(当然,用户可以选择通过API注册)。
I.E.我想通过使用我的数据库上下文和扩展Identity User类的类User来启用web api 2的授权和身份验证。
更新
我尝试做的是:我已经用我的类User替换了我的webapi2项目中的所有IdentityUser类,但在线(当我尝试登录时):
User user = await userManager.FindAsync(context.UserName, context.Password);
我得到错误:
System.Data.SqlClient.SqlException:对象名"dbo.AspNetUsers".无效
这种方法适用于我的asp.net MVC项目。
简而言之,我所做的是:
在我的DatabaseContext类中,我添加了以下行:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<IdentityUser>()
.ToTable("AspNetUsers");
modelBuilder.Entity<User>()
.ToTable("AspNetUsers");
}
在asp.net web api项目中,我已经将所有类IdentityUser更改为User,这就是