WinRT WebView and Cookies

Posted by javarg on ASP.net Weblogs See other posts from ASP.net Weblogs or by javarg
Published on Sat, 27 Oct 2012 17:24:20 GMT Indexed on 2012/10/27 23:02 UTC
Read the original article Hit count: 1303

Filed under:
|
|
|

Turns out that WebView Control in WinRT is much more limited than it’s counterpart in WPF/Silverlight.

There are some great articles out there in how to extend the control in order for it to support navigation events and some other features.

For a personal project I'm working on, I needed to grab cookies a Web Site generated for the user. Basically, after a user authenticated to a Web Site I needed to get the authentication cookies and generate some extra requests on her behalf.

In order to do so, I’ve found this great article about a similar case using SharePoint and Azure ACS.

The secret is to use a p/invoke to native InternetGetCookieEx to get cookies for the current URL displayed in the WebView control.

 

void WebView_LoadCompleted(object sender, NavigationEventArgs e) { var urlPattern = "http://someserver.com/somefolder"; if (e.Uri.ToString().StartsWith(urlPattern)) { var cookies = InternetGetCookieEx(e.Uri.ToString()); // Do something with the cookies } } static string InternetGetCookieEx(string url) { uint sizeInBytes = 0; // Gets capacity length first InternetGetCookieEx(url, null, null, ref sizeInBytes, INTERNET_COOKIE_HTTPONLY, IntPtr.Zero); uint bufferCapacityInChars = (uint)Encoding.Unicode.GetMaxCharCount((int)sizeInBytes); // Now get cookie data var cookieData = new StringBuilder((int)bufferCapacityInChars); InternetGetCookieEx(url, null, cookieData, ref bufferCapacityInChars, INTERNET_COOKIE_HTTPONLY, IntPtr.Zero); return cookieData.ToString(); }

 

Function import using p/invoke follows:

const int INTERNET_COOKIE_HTTPONLY = 0x00002000; [DllImport("wininet.dll", CharSet = CharSet.Unicode, SetLastError = true)] static extern bool InternetGetCookieEx(string pchURL, string pchCookieName, StringBuilder pchCookieData, ref System.UInt32 pcchCookieData, int dwFlags, IntPtr lpReserved);

Enjoy!

© ASP.net Weblogs or respective owner

Related posts about .NET

Related posts about c#