2016-01-21 106 views
1

我正在努力解決MVC應用程序和Azure移動應用程序之間的身份驗證問題。在MVC中運行會話Cookie和HttpClient

的MVC應用程序調用的移動應用登錄結束https:<api>/.auth/login/microsoftaccout?post_url_login=location

這所有的作品中,移動應用程序的調用現場驗證並重定向一路回MVC應用程序工作正常。

在MVC網站上,指向api的任何<a>鏈接授權並按預期返回結果。但是在控制器中使用httpclient失敗,出現401.

當我查看跟蹤和Azure移動應用程序日誌時,單擊<a>鏈接,我看到一個添加到請求標頭的AppServiceAuthSession cookie。 Httpclient跟蹤沒有這個。

如何讓HttpClient的行爲方式與點擊<a>鏈接相同?

+0

您可以爲httpClient指定cookie /頭文件。見http://stackoverflow.com/questions/12373738/ – kravits88

回答

0

您可以在Cookie中添加如:

var cookies = new CookieContainer(); 
using (var handler = new HttpClientHandler() { CookieContainer = cookies }) 
using (var client = new HttpClient(handler) { BaseAddress = new Uri("http://example.com")}) 
{ 
    var cookieDomain = "some domain"; 
    cookies.Add(cookieDomain, new Cookie("CookieName", "cookie_value")); 

    // Use client 
} 

從理論上講,你可以讀取MVC控制器上的Cookie出Response.Cookies,並根據需要通過值傳遞給你的端點。

+0

不幸的是,這兩個建議niether工作。當我添加cookie時,響應中的「Request.Header.Cookie」表示「AppServiceAuthSession = deleted」。當我查看'Reponse.Cookies'的控制器時,沒有一個叫做'AppServiceAuthSession'。 –