【问题标题】:Why does the cookie property of my Httpwebresponse object remain null ?(WP8)为什么我的 Httpwebresponse 对象的 cookie 属性保持为空?(WP8)
【发布时间】:2013-12-18 10:54:26
【问题描述】:

我在使用 Basic Authent 的 Web 服务器上请求,并且该服务器应该返回一个 cookie。当我使用 Web 浏览器时,我可以在 FiddlerProxy 中检查它...当我调试我的代码时,response.cookie 仍然为空.这是我的代码。感谢您的帮助

  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 decalrtion,则 httpwebresponse 的 cookie 属性不再为空...

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();

                        }

                    }

                }

【问题讨论】:

    标签: cookies windows-phone-8 httpwebresponse


    【解决方案1】:

    来自 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);
            }
    

    【讨论】:

    • 我不明白...我在 httpwebrequest 中设置了一个 cookie 容器...CookieContainer _cookiecontainer=new CookieContainer();request.CookieContainer = _cookiecontainer;..我错过了什么吗?
    • 您可以尝试将您的 CookieContainer 声明移至类级别吗?
    • 好的,现在 cookie 属性不为空,但仍然为空...我无法使用 windows phone 模拟器检查客户端和服务器之间的交换(FiddlerProxy 不工作)感谢您的帮助跨度>
    • 您可以在模拟器或设备上使用 fiddler。 fiddler2.com/documentation/Configure-Fiddler/Tasks/…
    • 我无法让它工作...我也尝试使用 charles、wireshark 和 Microsof 网络监控...但每次我都无法看到我的 WP 模拟器和服务器之间发生了什么。 ..你告诉我我的代码是否正确,我在 EDIT2 中编写了它,非常感谢
    【解决方案2】:

    试试这个。希望对你有帮助

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

    【讨论】:

    • 谢谢,但我的解决方案和安德拉斯的解决方案相同,我发现它更简单...
    猜你喜欢
    • 2015-06-08
    • 2013-03-13
    • 1970-01-01
    • 2014-06-21
    • 2020-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多