嗨我在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