private static async Task <object> ParseKnownTypes(HttpListenerContext httpContext, WebServerRequestContext ctx)
        {
            ContentType ct;

            try { ct = new ContentType(httpContext.Request.ContentType); }
            catch (FormatException) { return(null); }

            string payload;

            switch (ct.MediaType)
            {
            case "application/x-www-form-urlencoded":
                payload = await ctx.ReadAsString();

                if (payload == null)
                {
                    return("(empty)");
                }

                ctx.FormData = QueryStringValuesCollection.Parse(payload);
                return(ctx.FormData);

            case "application/json":
                payload = await ctx.ReadAsString();

                if (payload == null)
                {
                    return("(empty)");
                }

                ctx.JsonData = JToken.Parse(payload);
                return(ctx.JsonData);

            case "text/xml":
                payload = await ctx.ReadAsString();

                if (payload == null)
                {
                    return("(empty)");
                }

                ctx.XmlData = XDocument.Parse(payload);
                return(ctx.XmlData);

            default:
                return(null);
            }
        }