我试图在我的AccountController中调用一个方法,这是一个AuthorizationRequired类。但是当调用方法时,用户尚未获得授权。所以我写了这样的方法:
[HttpPost]
[AllowAnonymous]
public ActionResult Accept()
{
string memberno = TempData["memberno"] as string;
_accountRepository.AcceptTerms(memberno);
Account acc = _accountRepository.GetAccount(memberno);
LoginViewModel loginView = new LoginViewModel
{
MemberNo = acc.AccountNo,
Password = acc.Password,
ForgotPassword = false,
RememberMe = false
};
return Login(loginView,"");
}
我调用它的方法是$.ajax
方法:
function acceptTermses() {
$.ajax({
url: '@Url.Action("Accept", "Account")',
type: "POST",
success: function (da) {
alert("did it");
}, error: function (w) {
alert("FAILED");
}
});
}
但是当我尝试调用该方法时,我在浏览器中得到了这个:
Remote Address:::1:33405
Request URL:http://localhost:33405/Account/Accept
Request Method:GET
Status Code:302 Found
和
Failed to load repsonse data
而不是我的方法失败,而是在302 Found调用之后执行此调用:
http://localhost:33405/Account/Login?ReturnUrl=%2FAccount%2FAccept
然后它以“成功”运行,但从不调用控制器方法。
我曾尝试对类中的另一个方法执行相同的调用,并且工作得很好。我不知道为什么它不会用这种方法运行。
答案 0 :(得分:0)
return Login(loginView,"")
存在问题,即重定向到Login
Action
,这在您的问题中是错误的。
试试这个: -
[HttpPost]
[AllowAnonymous]
public ActionResult Accept()
{
string memberno = TempData["memberno"] as string;
_accountRepository.AcceptTerms(memberno);
Account acc = _accountRepository.GetAccount(memberno);
LoginViewModel loginView = new LoginViewModel
{
MemberNo = acc.AccountNo,
Password = acc.Password,
ForgotPassword = false,
RememberMe = false
};
return Json({ message="success" }, JsonRequestBehavior.AllowGet)
}
function acceptTermses() {
$.ajax({
url: '@Url.Action("Accept", "Account")',
type: 'POST',
datatype:'JSON',
success: function (data) {
if(data.message=="success"){
window.location.href="/Account/Login";
}
}, error: function (w) {
alert("FAILED");
}
});
}