我有以下代码可以成功运行。我不知道如何从响应中获取cookie。我的目标是我希望能够在请求中设置cookie并从响应中获取cookie。有什么想法吗?
private async Task<string> Login(string username, string password)
{
try
{
string url = "http://app.agelessemail.com/account/login/";
Uri address = new Uri(url);
var postData = new List<KeyValuePair<string, string>>
{
new KeyValuePair<string, string>("username", username),
new KeyValuePair<string, string>("password ", password)
};
HttpContent content = new FormUrlEncodedContent(postData);
var cookieJar = new CookieContainer();
var handler = new HttpClientHandler
{
CookieContainer = cookieJar,
UseCookies = true,
UseDefaultCredentials = false
};
var client = new HttpClient(handler)
{
BaseAddress = address
};
HttpResponseMessage response = await client.PostAsync(url,content);
response.EnsureSuccessStatusCode();
string body = await response.Content.ReadAsStringAsync();
return body;
}
catch (Exception e)
{
return e.ToString();
}
}
这是完整的答案:
HttpResponseMessage response = await client.PostAsync(url,content);
response.EnsureSuccessStatusCode();
Uri uri = new Uri(UrlBase);
var responseCookies = cookieJar.GetCookies(uri);
foreach (Cookie cookie in responseCookies)
{
string cookieName = cookie.Name;
string cookieValue = cookie.Value;
}
出于好奇,我能否问您为什么要在客户端上读取Cookie?我的理解是cookie用于将信息发送到服务器,而不是用于返回信息。
—
Darrel Miller
我在返回JSON的调用上使用返回的cookie,因此不必为每个JSON调用单独进行授权。也就是说,我有一个呼叫日志/ Home / GetData,它仅在获得授权的情况下返回JSON。应客户要求,我添加cookie,以便/ Home / GetData响应。否则会说“ 403”未授权。
—
彼得·凯尔纳
将授权标头设置为默认标头几乎一样有效,并且更加标准。服务器无法代表客户端自动设置auth标头。
—
Darrel Miller 2012年
感谢小费Darrel。您在asp.net中有什么例子吗?我为单点触控以及现在的Windows应用商店应用而为此苦苦挣扎。如果有一个简单的方法,我会很高兴。这是一个痛苦,特别是对于Windows应用商店上的async和await现在。
—
彼得·凯尔纳