我正在使用CookieAwareWebClient登录并与Web API交互。我的客户端在子域中具有登录服务,而API在不同的子域中(或者在不同的域上完全不确定)。但它们的不同之处在于客户端一旦设置就不会传入cookie。请看下面......
//call the web client
CookieAwareWebClient client = new CookieAwareWebClient();
client.BaseAddress = @"WEB_API_DOMAIN_NAME";
//establish login data
Dictionary<string, string> loginData = new Dictionary<string, string>();
loginData.Add("username", SCSettings.Default.username);
loginData.Add("password", SCSettings.Default.password);
//create login string from dictionary
string loginJson = JsonConvert.SerializeObject(loginData);
//begin login
string bouncerBaseUri = @"LOGIN_SERVICE_DOMAIN_NAME";
string bouncerUri = String.Format(@"{0}v1/auth/session/", bouncerBaseUri);
client.UploadString(bouncerUri, "POST", loginJson);
//test... NOM NOM NOM cookies
//Uri cookieUri = new Uri(bouncerBaseUri);
//Cookie sessionCookie = Helpers.GetSpecificCookie(client.CookieContainer, cookieUri, "bouncer");
//fails... cookie is not passed
string test = client.DownloadString("/api/reports/v1/reportconfig/");
答案 0 :(得分:0)
想出来......我需要在不同的Uri下将cookie添加到容器中。
//get the cookie
Uri loginUri = new Uri(bouncerBaseUri);
Cookie sessionCookie = Helpers.GetSpecificCookie(client.CookieContainer, loginUri , "bouncer");
//add to the container under a different Uri
Uri webApiBaseUri = new Uri(client.BaseAddress);
client.CookieContainer.Add(webApiBaseUri, sessionCookie);
GetSpecificCookie
只返回指定的Cookie
public static Cookie GetSpecificCookie(CookieContainer cookieJar, Uri domain, string cookieName)
{
CookieCollection scCookies = cookieJar.GetCookies(domain);
Cookie cookie = scCookies[cookieName];
return cookie;
}