Cookies 为什么我的Httpwebresponse对象的cookie属性保持为空?(WP8)
我在一个具有基本身份的web服务器上请求,该服务器应该返回一个cookie。当我使用web浏览器时,我可以在FiddlerProxy中检查它。。。调试代码时,response.cookie保持为空。这是我的密码。谢谢你的帮助Cookies 为什么我的Httpwebresponse对象的cookie属性保持为空?(WP8),cookies,windows-phone-8,httpwebresponse,Cookies,Windows Phone 8,Httpwebresponse,我在一个具有基本身份的web服务器上请求,该服务器应该返回一个cookie。当我使用web浏览器时,我可以在FiddlerProxy中检查它。。。调试代码时,response.cookie保持为空。这是我的密码。谢谢你的帮助 public void ConnexionNT(string password,string user) { CookieContainer _cookiecontainer=new CookieContainer(); try
public void ConnexionNT(string password,string user)
{
CookieContainer _cookiecontainer=new CookieContainer();
try
{
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(URL_CONNEXION);
request.Method = "GET";
request.Credentials = new NetworkCredential(user, password, domain);
request.CookieContainer = _cookiecontainer;
request.BeginGetResponse(new AsyncCallback(GetResponse), request);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void GetResponse(IAsyncResult MyresponseAsync)
{
HttpWebRequest request = (HttpWebRequest)MyresponseAsync.AsyncState;
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(MyresponseAsync);
if (response.Cookies!=null) //REMAINS NULL
{ //SAVE COOKIE}
}
编辑
如果我在类级别移动Cookiecontainer贴片,httpwebresponse的cookie属性将不再为null
EDIT2
从服务器接收cookie时,此代码正确吗
public void ConnexionNT(string password,string user)
{
try
{
HttpWebRequest request= (HttpWebRequest)HttpWebRequest.Create(URL_CONNEXION);
request.Method = "GET";
request.Credentials = new NetworkCredential(user, password, domain);
request.CookieContainer = _cookiecontainer;
request.BeginGetResponse(new AsyncCallback(GetResponse),request);
}
catch(HttpRequestException)
{
MessageBox.Show("Un problème de connexion avec le serveur a eu lieu.", "Echec Authentification", MessageBoxButton.OK);
}
catch (Exception )
{
MessageBox.Show("Une erreur a eu lieu","Echec Authentification", MessageBoxButton.OK);
}
}
private void GetResponse(IAsyncResult MyresponseAsync)
{
HttpWebRequest request = (HttpWebRequest)MyresponseAsync.AsyncState;
if (request != null)
{
try
{
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(MyresponseAsync);
//Not null but EMPTY WHY? if (response.Cookies != null)
{
using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication())
{
using (IsolatedStorageFileStream isfs = isf.OpenFile("CookiesFile", FileMode.Create, FileAccess.Write))
{
using (StreamWriter sw = new StreamWriter(isfs))
{
foreach (Cookie cookieValue in response.Cookies)
{
sw.WriteLine("Cookie: " + cookieValue.ToString());
}
sw.Close();
}
}
//declenche l'event pour lancer la navigation sur la vue "codepin"
if (event_GetCookie != null && response.Cookies.Count>0)
event_GetCookie.Invoke();
}
}
}
从MSDN:
如果关联HttpWebRequest的CookieContainer属性为null,Cookies属性也将为null。但是,服务器发送的任何cookie信息都将在Headers属性中可用
您需要在请求中创建一个CookieContainer
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(args[0]);
request.CookieContainer = new CookieContainer();
HttpWebResponse response = (HttpWebResponse) request.GetResponse();
// Print the properties of each cookie.
foreach (Cookie cook in response.Cookies)
{
Console.WriteLine("Cookie:");
Console.WriteLine("{0} = {1}", cook.Name, cook.Value);
}
试试这个。愿这对你有帮助
public void ConnexionNT(string password,string user)
{
CookieContainer _cookiecontainer=new CookieContainer();
try
{
CookieContainer container = new CookieContainer();
container.Add(new Uri("http://yoursite"), new Cookie("name", "value"));
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://yoursite");
request.CookieContainer = container;
request.Method = "GET";
request.Credentials = new NetworkCredential(user, password, domain);
request.BeginGetResponse(new AsyncCallback(GetResponse), request);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void GetResponse(IAsyncResult MyresponseAsync)
{
HttpWebRequest request = (HttpWebRequest)MyresponseAsync.AsyncState;
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(MyresponseAsync);
if (response.Cookies!=null) //REMAINS NULL
{ //SAVE COOKIE}
}
我不明白…我在httpwebrequest中设置了一个cookie容器。。。CookieContainer _CookieContainer=新CookieContainer();request.CookieContainer=\u CookieContainer;。。我遗漏了什么吗?你能尝试将CookieContainer声明移动到类级别吗?好了,现在cookie属性不是null而是空的…而且我无法使用windows phone emulator(FiddlerProxy不工作)检查客户端和服务器之间的交换。谢谢你的帮助。你可以将fiddler与仿真器或设备一起使用。我做不到…我也试过和charles在一起,wireshark和Microsof网络监控…但是每次我都看不到我的WP模拟器和服务器之间发生了什么…你能告诉我我的代码是否正确吗?我在EDIT2中写的,谢谢你,汉克斯,但我得到的结果与你的解决方案和andras的解决方案相同,我发现它更简单一些。。。