WebApi重定向到外部站点

时间:2016-10-04 17:36:00

标签: javascript c# angularjs asp.net-web-api

我有一个WebApi控制器,在我调用它后,我希望它将我重定向到另一个站点

这是我的c#代码

public async Task<HttpResponseMessage> Login(LoginParameters parameters, [FromUri]string returnUrl)
{
    //same validations
    var response = Request.CreateResponse(HttpStatusCode.Moved);

    response.Headers.Location = new Uri("Http://www.google.com");

    return response;
}

我的javascript代码就像这样

'user strict'
var login = function ($scope, $http) {

    var parameters = {
        userName: userName,
        password: password
    };

    var url = '/api/user/Login';

    $http.post(url, parameters);
        .then(function(response){
            /*some random code that i will remove */
        });
};

login.$inject = ['$scope', '$http'];
module.exports = login;

查看chrome控制台我意识到http POST调用返回httpstatus = 302.然后我看到另外2个请求google.com,但我的页面没有被重定向。那么我做错了什么?

提前致谢

2 个答案:

答案 0 :(得分:1)

使用$http时,会使用XMLHttpRequest对象,该对象不会调整用户的位置。它甚至会遵循重定向。你有几个选择:

  • 您可以将新位置作为字段返回,然后在.then回调中指定window.location以进行重定向。

  • 您可以使用标准表单发布到资源,然后浏览器会适当地遵循重定向。

答案 1 :(得分:0)

我建议你研究一下angular interceptors。您可以“拦截”响应,检查状态代码,并使用window.location或$location重定向。这非常灵活,因此您可以在一个地方编写逻辑。

编辑:这似乎不起作用,因为看起来你不能catch a 302。根据这篇文章,似乎请求被自动重定向,您回复的响应来自重定向的位置。在OP的帖子中 - 响应是空的,因为OP被重定向到另一个域,导致了跨域请求(所以如果你的重定向会做同样的事情,请记住这一点),但建议的解决方案是检查响应查看它是否包含重定向页面的数据。