2016-01-21 103 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'。 –