Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 登录到域A,然后使用域A';s域B的cookies_C#_Cookies - Fatal编程技术网

C# 登录到域A,然后使用域A';s域B的cookies

C# 登录到域A,然后使用域A';s域B的cookies,c#,cookies,C#,Cookies,我正在使用CookieAwareWebClient登录并与web API交互。我的客户端在一个子域中有登录服务,API在另一个子域中(或完全在另一个域上)。不确定。但是它们之间的差异很大,一旦设置好cookie,客户端就不会传入cookie。请看下面 //call the web client CookieAwareWebClient client = new CookieAwareWebClient(); client.BaseAddress = @"WEB_API_DOMAIN_NAME";

我正在使用CookieAwareWebClient登录并与web API交互。我的客户端在一个子域中有登录服务,API在另一个子域中(或完全在另一个域上)。不确定。但是它们之间的差异很大,一旦设置好cookie,客户端就不会传入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/");
//调用web客户端
CookieAwareWebClient=新CookieAwareWebClient();
client.BaseAddress=@“WEB\u API\u DOMAIN\u NAME”;
//建立登录数据
Dictionary loginData=新字典();
添加(“用户名”,SCSettings.Default.username);
添加(“密码”,SCSettings.Default.password);
//从字典创建登录字符串
字符串loginJson=JsonConvert.SerializeObject(loginData);
//开始登录
字符串bouncerbaueri=@“登录\服务\域名”;
string bouncerUri=string.Format(@“{0}v1/auth/session/”,bouncerbaeuri);
上传字符串(bouncerUri,“POST”,loginJson);
//测试。。。诺姆诺姆饼干
//Uri cookieUri=新Uri(bouncerbaueri);
//Cookie sessionCookie=Helpers.GetSpecificCookie(client.CookieContainer,cookieUri,“bouncer”);
//失败。。。cookie未通过
string test=client.DownloadString(“/api/reports/v1/reportconfig/”);

找到了答案。。。我需要将cookie添加到另一个Uri下的容器中

//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;
}