2013-12-18 5 views
1

Im, запрашивающий на веб-сервере с Basic Authent, и сервер должен вернуть cookie.It делает, когда я использую веб-браузер, я могу проверить его в FiddlerProxy ... Когда я отлаживаю свой код, response.cookie остается null. Вот мои code.Thanks за помощьПочему свойство cookie моего объекта Httpwebresponse остается null? (WP8)

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

EDIT

Если я переместить decalrtion Cookiecontainer на уровне класса печенье свойство HttpWebResponse не нуль больше ...

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

         } 

        } 

       } 

ответ

2

Из MSDN:

Если свойство CookieContainer ассоциированного HttpWebRequest имеет нулевое значение, свойство Cookies также будет нулевым. Однако любая информация 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); 
     } 
+0

Я не понимаю ... Я поставил печенье контейнер в HttpWebRequest ... CookieContainer _cookiecontainer = новый CookieContainer(); request.CookieContainer = _cookiecontainer; .. я упускаю что-то? –

+0

Можете ли вы попытаться переместить декларацию CookieContainer на уровень класса? –

+0

Теперь свойство cookie не пустое, но остается пустым ... и я не могу проверить обмены между клиентом и сервером с помощью эмулятора Windows Phone (FiddlerProxy не работает) спасибо за помощь ур –

0

Попробуйте это. может это воля помогает вам

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

спасибо, но я получаю те же результаты с вашим решением и andras, который я нашел немного более простым. .. –

Смежные вопросы