Angularjs angular.js http post到MVC异步任务<;行动结果>;web方法失败
我试图从angular客户端调用MVC控制器(示例登录)中的异步方法,但调用失败。我也用谷歌邮递员工具试过了Angularjs angular.js http post到MVC异步任务<;行动结果>;web方法失败,angularjs,model-view-controller,asynchronous,controller,Angularjs,Model View Controller,Asynchronous,Controller,我试图从angular客户端调用MVC控制器(示例登录)中的异步方法,但调用失败。我也用谷歌邮递员工具试过了 // // POST: /Account/Login [HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] public async Task<ActionResult> Login(LoginViewModel model, string returnUrl) {
//
// POST: /Account/Login
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
if (!ModelState.IsValid)
{
return View(model);
}
// This doesn't count login failures towards account lockout
// To enable password failures to trigger account lockout, change to shouldLockout: true
var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false);
switch (result)
{
case SignInStatus.Success:
return RedirectToLocal(returnUrl);
case SignInStatus.LockedOut:
return View("Lockout");
case SignInStatus.RequiresVerification:
return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe });
case SignInStatus.Failure:
default:
ModelState.AddModelError("", "Invalid login attempt.");
return View(model);
}
}
如果您正在使用[ValidateAntiForgeryToken]装饰器,则该操作需要在post数据中传递请求验证令牌 您可以删除[ValidateAntiForgeryToken],但这会使您的操作对被篡改的请求开放 另一个选项是向页面添加防伪令牌,然后在请求中传递其值 您的razor视图需要一个带有令牌的表单(注意:这只是一个虚拟表单,允许将令牌添加到页面中) 在javascript中,您可以传递其值
var logiuser=function(电子邮件、密码、返回URL){
var req={
方法:“post”,
url:“/Mysite/Login”,
标题:{
“内容类型”:未定义
},
数据:{
型号:{
电邮:电邮,,
密码:密码,
记住:错
},
__RequestVerificationToken:$(“#验证表单输入[名称=u RequestVerificationToken]”).val(),
returnUrl:returnUrl
}
};
返回$http(req)
.然后(功能(响应){
返回响应数据;
},功能(原因){
返回原因;
});
};代码>操作用[ValidateAntiForgeryToken]修饰,是否传递带有数据的请求验证令牌?是[ValidateAntiForgeryToken]是问题所在。谢谢这就解决了问题。那么,有没有可能把它作为其他人的答案呢?
@using(Html.BeginForm("Login", "ControllerName", FormMethod.Post, new { id = "verification-form"}) {
@Html.AntiForgeryToken()
}