嗨我在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; }
}
現在它給我上UserManager
和SignInManager
,我不得不使用泛型類型兩者像UserManager<TUser, TKey>
但沒有像這樣在賬戶錯誤控制器,在潛在的修復工作室建議我創建一個新類UserManager
和SignInManager
根據Microsoft.AspNet.Identity
和Microsoft.AspNet.Identity.Owin
名稱空間。我已經將它們包含在我的控制器的開始。
而在去年async Task<ActionResult>
是不是讓我回去其中具有JSON數據的字符串,我想用RedirectToRoute
將它傳遞給一個路線,但我不知道如何做到這一點,
我卡在這裏非常糟糕,不知道該怎麼辦。
那麼首先,你是返回一個'string',而不是一個'ActionResult',所以更改'公共異步任務'到'公共異步任務' –
Icemanind
但它仍然顯示我在usermanager和signmanager錯誤 – Azeem112