在AuthorizationRequired类中调用AllowAnonymous方法给出了302错误

时间:2014-08-14 07:15:13

标签: c# ajax asp.net-mvc-4

我试图在我的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

然后它以“成功”运行,但从不调用控制器方法。

我曾尝试对类中的另一个方法执行相同的调用,并且工作得很好。我不知道为什么它不会用这种方法运行。

1 个答案:

答案 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");
    }
});

}