2017-09-15 67 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工作完美