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