2017-09-15 22 views
-1

嗨我在web API控制器中爲我的應用程序編寫web API。我使用這種格式編寫它們,如何編寫mvc 5登錄方法的web api

// GET: api/ParentsApi/GetSession 
[System.Web.Http.AcceptVerbs("GET", "POST")] 
[System.Web.Http.HttpGet] 

public string GetSession() 
     { 
      var session = db.AspNetSessions.Select(x=> new { x.SessionName , x.Id}).ToList(); 

      var javaScriptSerializer = new System.Web.Script.Serialization.JavaScriptSerializer(); 
      string jsonString = javaScriptSerializer.Serialize(session); 

      return jsonString; 
     } 

它以json格式返回所需的數據。

現在我想要的登錄方法也一樣,我從帳戶控制器複製登錄方法,並將其粘貼到我的API控制器進行了一些修改。

public async Task<ActionResult> Login(string UserName, string Password) 
     { 
      SEA_DatabaseEntities db = new SEA_DatabaseEntities(); 

      LoginViewModel model = new LoginViewModel(); 
      model.UserName = UserName; 
      model.Password = Password; 
      model.RememberMe = false; 

      var result = await SignInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, shouldLockout: false); 
      LoginUser login = new LoginUser(); 

      switch (result) 
      { 
       case SignInStatus.Success: 

        var userID = SignInManager.AuthenticationManager.AuthenticationResponseGrant.Identity.GetUserId(); 

        var Name = db.AspNetUsers.Where(x => x.Id == userID).Select(x => x.Name).FirstOrDefault(); 
        login.Id = userID; 
        login.Name = Name; 
        login.Message = "Login Success"; 
        if (UserManager.IsInRole(userID, "Teacher")) 
        { 
         login.Role = "Teacher"; 
        } 
        else if (UserManager.IsInRole(userID, "Student")) 
        { 
         login.Role = "Student"; 
        } 

        var javaScriptSerializer = new System.Web.Script.Serialization.JavaScriptSerializer(); 
        string jsonString = javaScriptSerializer.Serialize(login); 

        return jsonString; 

       case SignInStatus.Failure: 
        login.Message = "Invalid login attempt."; 

        var javaScriptSerializer1 = new System.Web.Script.Serialization.JavaScriptSerializer(); 
        string jsonString1 = javaScriptSerializer1.Serialize(login); 

        return jsonString1; 

       default: 
        login.Message = "Invalid login attempt."; 
        var javaScriptSerializer2 = new System.Web.Script.Serialization.JavaScriptSerializer(); 
        string jsonString2 = javaScriptSerializer2.Serialize(login); 

        return jsonString2; 
      } 
     } 

這裏是我的LoginUser類代碼

public class LoginUser 
     { 
      public string Id { set; get; } 
      public string Name { set; get; } 
      public string Role { set; get; } 
      public string Message { set; get; } 

     } 

現在它給我上UserManagerSignInManager,我不得不使用泛型類型兩者像UserManager<TUser, TKey>但沒有像這樣在賬戶錯誤控制器,在潛在的修復工作室建議我創建一個新類UserManagerSignInManager根據Microsoft.AspNet.IdentityMicrosoft.AspNet.Identity.Owin名稱空間。我已經將它們包含在我的控制器的開始。

而在去年async Task<ActionResult>是不是讓我回去其中具有JSON數據的字符串,我想用RedirectToRoute將它傳遞給一個路線,但我不知道如何做到這一點,

我卡在這裏非常糟糕,不知道該怎麼辦。

+0

那麼首先,你是返回一個'string',而不是一個'ActionResult',所以更改'公共異步任務'到'公共異步任務' – Icemanind

+0

但它仍然顯示我在usermanager和signmanager錯誤 – Azeem112

回答

0

我解決了SignInManager和的UserManager通過將此代碼

private ApplicationSignInManager _signInManager; 
private ApplicationUserManager _userManager; 

public ApplicationSignInManager SignInManager 
{ 
    get 
    { 
     return _signInManager ?? HttpContext.Current.GetOwinContext().Get<ApplicationSignInManager>(); 
    } 
    private set 
    { 
     _signInManager = value; 
    } 
} 

public ApplicationUserManager UserManager 
{ 
    get 
    { 
     return _userManager ?? HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>(); 
    } 
    private set 
    { 
     _userManager = value; 
    } 
} 

立即登錄API工作完美