public Task<HttpResponseMessage> ExecuteAsync(HttpControllerContext controllerContext, CancellationToken cancellationToken)
        {
            // get the converter to use from the RouteData
            var converter = controllerContext.RouteData.Values["converter"] as IFacadeMessageConverter;

            if (converter == null)
                throw new InvalidOperationException("Requests mapped to FacadeController must supply a converter in RouteData");

            var processor = new FacadeRequestProcessor();

            return processor.Process(controllerContext.Request, converter);
        }
        protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            // find matching converter
            var converter = this.converters.FirstOrDefault(c => c.Match(request));

            if (converter == null)
            {
                // continue normal message processing
                return base.SendAsync(request, cancellationToken);
            }

            var processor = new FacadeRequestProcessor();

            return processor.Process(request, converter);
        }