RedirectToLocal不起作用

时间:2015-10-06 03:39:58

标签: javascript .net angularjs asp.net-mvc asp.net-mvc-4

我有一个登录页面,可以通过使用Angular的View调用。

一旦它点击“RedirecToLocal”命令..我一步一步,我看到它击中我的家庭控制器并返回索引视图就好......但是当我的浏览器实际上将页面更改为索引时,它只是赢了在登录屏幕上改变并保持吮吸。我不明白为什么。我在这里疯了

帐户控制器

[Authorize]
[InitializeSimpleMembership]
public class AccountController : Controller
{
    [HttpPost]
    [AllowAnonymous]
    public ActionResult Login(LoginFormModel form, string selectedShow)
    {
        if (ModelState.IsValid && WebSecurity.Login(form.userName, form.password))
        {
            ...code here...
        }
        return RedirectToLocal("/");  //HITS HERE SUCCESSFULLY

家庭控制器

[Authorize]
public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();  //HITS HERE SUCCESSFULLY
    }
}

编辑:

HTML&角

    <button id="loginBtn" ng-click="login()" ng-class="{ 'disabled': isLoading }" class="btn btn-large btn-primary btn-block">
  <span>{{buttonText}}</span>
  </button>

Angular LoginController:

AccountFactory.login($rootScope.formData);

帐户工厂

AccountFactory.login = function (formData) {
    return $http({
        method: 'POST',
        url: '/Account/Login',
        data: formData
    });
};

1 个答案:

答案 0 :(得分:2)

当通过$ http使用Ajax时,浏览器将不接受服务器发出的重定向以进行安全措施。

使用ajax时,处理成功返回,指示授权并通过客户端路由重定向(您喜欢的风格)。

AccountFactory.login($rootScope.formData).then(function (data) {
    $location.path("/");
});

由于.then()被视为成功回调,因此可接受的模式是从您的API返回成功的200状态代码以获得成功,并40x用于不成功的授权尝试。< / p>

[HttpPost]
[AllowAnonymous]
public ActionResult Login(LoginFormModel form, string selectedShow)
{
    if (ModelState.IsValid && WebSecurity.Login(form.userName, form.password))
    {
        ...code here...
        return new HttpStatusCodeResult(200);
    }
    else 
    {
        return new HttpStatusCodeResult(403);
    } 
}