2014-03-02 246 views
1

我有3個項目組成的解決方案,首先是數據訪問層(其中模型和數據庫上下文被定義),另外兩個是Asp.net MVC 5和Asp。淨Web Api 2項目。Asp.net web API 2身份驗證身份

對於身份驗證和授權我使用Asp.net的身份,我已經建立了這樣的(在我的DAL項目):

public class DatabaseContext : IdentityDbContext<User> 
{ 
    public DatabaseContext() 
     : base("DefaultConnection") 
    { 
     Configuration.LazyLoadingEnabled = true; 
    } 

    public DbSet<IdentityUser> IdentityUsers { get; set; } 

    /* 
     Other DbSets ... 
    */ 
} 

我的用戶類擴展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項目能夠與我的實體User和我的數據庫上下文一起工作,我必須做些什麼改變,因此爲了使用API​​,用戶必須登錄? (並且當然用戶可以選擇通過API註冊)。

I.E.我想通過使用我的數據庫上下文和擴展Identity用戶類的class User來爲web api 2啓用授權和身份驗證。

UPDATE

我一直試圖做的是這樣的:我已經更換了所有IdentityUser班在我的Web API 2項目,我班的用戶,但對行(當我嘗試登錄) :

User user = await userManager.FindAsync(context.UserName, context.Password); 

我得到錯誤:

System.Data.SqlClient.SqlException:無效的對象名稱dbo.AspNetUsers「。

這種方法適用於我的asp.net MVC項目。

回答

1

總之我所做的是:

在我DatabaseContext類我已經添加了這些行:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     base.OnModelCreating(modelBuilder); 
     modelBuilder.Entity<IdentityUser>() 
      .ToTable("AspNetUsers"); 
     modelBuilder.Entity<User>() 
      .ToTable("AspNetUsers"); 
    } 

在asp.net網頁API項目,我已經改變了所有的類IdentityUser給用戶,這就是它