无法在Windows Phone应用中使用Web浏览器控件设置Cookie

时间:2014-08-06 12:26:18

标签: windows-phone-7 windows-phone-8 httpwebrequest webbrowser-control session-cookies

我目前正致力于win7& 8混合应用程序。

我需要在混合应用程序中维护会话。因为该用户必须在app中登录。然后为了维护会话,我们将请求登录验证服务。一旦我们在Web服务响应中获取cookie,我们将注入这些cookie用于Windows手机网页浏览器控件以显示相关页面。

从登录服务记录Cookie 通过传递post参数为登录身份验证创建了httpwebrequest。从callback-httpwebresponse捕获set-cookies,这是一个JSON响应,并将其保存在本地Variable / Cookie Container / Cookie集合中。

将Cookie设置为其他请求:

- > 在所有其他请求的Web浏览器控件的标头字段中传递Cookie。它很有效。

- > 创建了一个HttpWebRequest并在标题字段中设置了Cookie。

  • 尝试使用标题分配[Cookies"] =可变数据/ cookie容器数据/ cookie集合数据。
  • 通过创建cookie容器分配给请求(request.CookieContainer = cookie容器数据/ cookie集合
    数据)。

- > 将html Web响应保存到异步回调方法的字符串变量中,并尝试将其加载到Web浏览器控件中。

  • Web浏览器控件只有一种方法可以加载html网页(即" webbrowser.NavigateToString(string html)")。

  • 从回调响应方法触发另一个事件处理程序。我们可以在字符串变量中看到html代码。但它是 在浏览器中显示黑页。

  • 尝试将html文件保存在独立存储中,并使浏览器导航到文件位置。它显示一个空白 页。

  • 试图附加"" + httpWebResponse +"" - 它显示的页面没有任何CSS或
    图片。页面中的其他导航也没有发生。

影响:会话不是通过应用程序维护的。

使用的工具: Microsoft Visual studio ultimate 2010 Version 10, Microsoft .Net framework 4.0版, Windows Phone 7.1 SDK

任何人都可以帮助我。谢谢你提前!!

请参考以下代码: 从登录服务记录Cookie:

private void PostLoginRequest()         {

        string AuthServiceUri = "Service URL";
        HttpWebRequest AuthReq = HttpWebRequest.Create(AuthServiceUri) as HttpWebRequest;
        AuthReq.CookieContainer = new CookieContainer();
        AuthReq.ContentType = "application/x-www-form-urlencoded";
        AuthReq.Method = "POST";

        AuthReq.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), AuthReq);
    }

    void GetRequestStreamCallback(IAsyncResult callbackResult)
    {
        HttpWebRequest Request = (HttpWebRequest)callbackResult.AsyncState;

        Stream postStream = Request.EndGetRequestStream(callbackResult);
        string postData = "Postdata parameters";
        byte[] byteArray = Encoding.UTF8.GetBytes(postData);
        postStream.Write(byteArray, 0, byteArray.Length);
        postStream.Close();
        myRequest.BeginGetResponse(new AsyncCallback(GetResponsetStreamCallback), Request);

    }

    void GetResponsetStreamCallback(IAsyncResult callbackResult)
    {

        try
        {

            HttpWebRequest callBackRequest = (HttpWebRequest)callbackResult.AsyncState;

            HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(callbackResult);

            CookieCollection cookiecollec = new CookieCollection();
            cookiecollec = response.Cookies;
            App.cookieCollection = cookiecollec; //global varaiable

        }
        catch (Exception e)
        {
    MessageBox.Show(e.Message);
        }
    }

另一个带有已记录Cookie的httpwebrequest:

private void ResponsivePostURL(string PageName,string PostURL,string PostDatas)              {

                    Uri ServiceUri = new Uri(PostURL); //Service URL

                    HttpWebRequest requestURL = HttpWebRequest.CreateServiceUri as HttpWebRequest;
                    requestURL.ContentType = "application/x-www-form-urlencoded";
                    requestURL.Method = "POST";                        
                    requestURL.CookieContainer = new CookieContainer();
                    requestURL.CookieContainer.Add(ServiceUri, App.cookieCollection);

                    requestURL.BeginGetResponse(new AsyncCallback(GetResponsetStreamCallback), requestURL); 


             }

void GetResponsetStreamCallback(IAsyncResult callbackResult)              {

             try
             {

                 HttpWebRequest request = (HttpWebRequest)callbackResult.AsyncState;
                 HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(callbackResult);


                // MessageBox.Show(response.Cookies.ToString());

                 string responseString = "<html><head></head><body>";
                 Stream streamResponse = response.GetResponseStream();
                 StreamReader reader = new StreamReader(streamResponse);
                 responseString = responseString + reader.ReadToEnd() + "</body></html>";                   
                 streamResponse.Close();
                 reader.Close();
                 response.Close();



                 this.Dispatcher.BeginInvoke(() =>
                 {

                     webBrowser.IsScriptEnabled = true;
                     webBrowser.NavigateToString(responseString);

                 });
             }
             catch (Exception ex)
             {
                 MessageBox.Show(ex.Message);
             }
         }

0 个答案:

没有答案