我试图从角度客户端调用MVC控制器(示例登录)中的Async方法,并且调用失败。我也尝试使用google postman工具。
//
// 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);
}
}
以下是调用Login方法的角度服务的片段
var loginUser = function (email, password, returnUrl) {
var req = {
method: 'post',
url: '/Mysite/Login',
headers: {
'Content-Yype': undefined
},
data: {
model: {
Email: email,
Password: password,
RememberMe: false
},
returnUrl: returnUrl
}
};
return $http(req)
.then(function (response) {
return response.data;
}, function (reason) {
return reason;
});
};
&#13;
响应会引发状态为500的内部错误。
angular.js是否支持对Web方法的异步调用?
感谢并感谢您的帮助
答案 0 :(得分:0)
如果您使用[ValidateAntiForgeryToken]装饰器,则该操作需要在后期数据中传递请求验证令牌。
您可以删除[ValidateAntiForgeryToken],但这会使您的操作对被篡改的请求开放。
另一种选择是向页面添加防伪标记,然后在请求中传递其值。
您的剃刀视图需要一个带有令牌的表单(注意:这只是一个虚拟表单,允许将令牌添加到页面中)。
var loginUser = function (email, password, returnUrl) {
var req = {
method: 'post',
url: '/Mysite/Login',
headers: {
'Content-Type': undefined
},
data: {
model: {
Email: email,
Password: password,
RememberMe: false
},
__RequestVerificationToken: $("#verification-form input[name=__RequestVerificationToken]").val(),
returnUrl: returnUrl
}
};
return $http(req)
.then(function (response) {
return response.data;
}, function (reason) {
return reason;
});
};
在您的javascript中,您可以传递其值
height