FormUrlEncodedContent with support for array values

Posted by & filed under Dev', Tips.

As convenient as System.Web.Http is for .NET developers, while working on my current project, I discovered that it did not support array values out of the box.
When you want to post something in the ‘x-www-form-urlencoded’ form, and using the FormUrlEncodedContent class, you are limited to string keys and values as FormUrlEncodedContent is build out of an IEnumerable<KeyValuePair<string, string>> (or more commonly a Dictionary<string, string>) object.

What if I want to send an array like :
POST http://dev.someserver.fr/0.2/theaters/set HTTP/1.1
Accept: */*
Content-Length: 40
Accept-Encoding: identity
Connection: Keep-Alive
Cache-Control: no-cache
Content-Type: application/x-www-form-urlencoded
User-Agent: NativeHost
Host: dev.cinetime.fr
Pragma: no-cache
theaters=["LI38249","LI20271","LI20306"]

Well you can’t. Or you could rewrite and extend FormUrlEncodedContent.
Or you could just reuse the following gist, because that’s precisely what I’ve done :

Note that I only needed (thus added) support for array string values, it can be extended for array keys, array of numeric values, …

A la quête du pixel-perfect : Windows Runtime (Windows Store Apps)

Posted by & filed under Non classé.

Au menu du jour, je vous propose un petit helper tout simple pour vous aider à faire du pixel perfect dans vos applications Windows Store.
Il permet via la classe DisplayInformation de déterminer le ratio courant de mise à l’échelle de l’UI (c-a-d le ratio entre les pixels logiques utilisés dans le XAML et les pixels physiques sur l’écran du device final).

Il permet de convertir une taille logique en taille physique. Je m’en sers par exemple dans mes applications pour demander des images aux webservices qui font pile poil la bonne taille en fonction de l’écran de l’utilisateur final.
Un user avec un écran 800×480 fera des économies de bande passante en téléchargeant de plus petites images alors que le possesseur d’un écran 1920×1080 profitera pleinement de la finesse de son écran.