我有一个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,但我的页面没有被重定向。那么我做错了什么?
提前致谢
答案 0 :(得分:1)
使用$http
时,会使用XMLHttpRequest
对象,该对象不会调整用户的位置。它甚至会遵循重定向。你有几个选择:
您可以将新位置作为字段返回,然后在.then
回调中指定window.location
以进行重定向。
您可以使用标准表单发布到资源,然后浏览器会适当地遵循重定向。
答案 1 :(得分:0)
我建议你研究一下angular interceptors。您可以“拦截”响应,检查状态代码,并使用window.location或$location重定向。这非常灵活,因此您可以在一个地方编写逻辑。
编辑:这似乎不起作用,因为看起来你不能catch a 302。根据这篇文章,似乎请求被自动重定向,您回复的响应来自重定向的位置。在OP的帖子中 - 响应是空的,因为OP被重定向到另一个域,导致了跨域请求(所以如果你的重定向会做同样的事情,请记住这一点),但建议的解决方案是检查响应查看它是否包含重定向页面的数据。