Při vývoji mé Windows 8.1 aplikace jsem potřeboval využít ASP.NET Identity pro autentizaci v ASP.NET Web API službě. Protože Identity kromě klasického lokálního přihlašování nabízí i možnost sociálního (externího) přihlašování přes Facebook, Microsoft Account a další, rozhodl jsem se implementovat i tuto funkčnost. Bohužel, autentizace tímto způsobem vyžadovala využití cookies, které musí být následně přeposlány dál na endpoint, který dokončí registraci nového uživatele. Protože této proces je nutné začít v ovládacím prvku WebView, potřebujeme z něho získat potřebné cookie. WebView ale žádné metody ani vlastnosti, které by se k tomuto účelu daly využít nenabízí. Jak to můžeme vyřešit? Ve skutečnosti je možné získat přístup ke kolekci cookies globálně, bez přímého přístupu ke konkrétnímu WebView. Vytvoříme si novou instance třídy HttpBaseProtocolFilter a následně použijeme vlastnost CookieManager . Její typ HttpCookieManager nabízí několik zajímavých metod:
- GetCookies - vrací kolekci HttpCookieCollection, která obsahuje cookies pro dané URI
- SetCookie - nastaví cookie
- DeleteCookie - smaže cookie
Abychom nyní mohli přečíst všechny cookie, které jsou dostupné pro nějakou adresu URI, stačí nám jednoduše projít obsah HttpCookieCollection , kterou vrací metoda GetCookies :
HttpBaseProtocolFilter myFilter = new HttpBaseProtocolFilter(); var cookieManager = myFilter.CookieManager; HttpCookieCollection myCookieJar = cookieManager.GetCookies( new Uri( "http://localhost:33633/" ) ); foreach ( HttpCookie c in myCookieJar ) { Debug.WriteLine( c.Name ); Debug.WriteLine( c.Value ); }