2016-10-04 115 views
1

我有一個的WebAPI控制器後,我調用它,我希望它我重定向到另一個網站的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的更多請求,但我的頁面沒有重定向。那麼我做錯了什麼?

在此先感謝

回答

1

當您使用$http,它使用一個XMLHttpRequest對象不調整該用戶的位置。它甚至會遵循重定向。你有幾個選擇:

  • 你可以返回新的位置作爲一個字段,然後在.then回調,分配window.location引起重定向。

  • 您可以使用標準表單發佈到資源,然後瀏覽器將按照適當的重定向。

0

我建議你看看angular interceptors。您可以「攔截」響應,檢查狀態碼,並使用window.location或$location重定向。這非常靈活,因此您可以將邏輯寫入一個地方。

編輯:這似乎不工作,因爲它看起來你不能catch a 302。根據這篇文章,看起來這個請求會被自動重定向,並且你會得到的回覆來自重定向的位置。在OP的文章中 - 響應是空的,因爲OP被重定向到導致跨域請求的不同域(因此,如果您的重定向將執行相同操作,請記住這一點),但提議的解決方案是檢查響應以查看它是否包含來自重定向頁面的數據。

+1

http://stackoverflow.com/questions/18737674/handle-http-302-response-from-proxy-in-angularjs –

+0

哦,這很有趣!我不知道!謝謝! – Zach

相關問題