public HttpControllerDescriptor SelectController(HttpRequestMessage request)
        {
            var provider = request.GetRouteDataProvider();
            var info = provider.GetData(request);

            // We should have consumed all of the route by now, if we haven't then throw a 404
            if (!info.ExtraneousMatch)
            {
                if (info.Environment.ContainsKey(Constants.ControllerNamePropertyKey))
                {
                    var controllerName = info.Environment[Constants.ControllerNamePropertyKey].ToString();
                    var controllerType = SuperscribeConfig.ControllerTypeCache.GetControllerTypes(controllerName).FirstOrDefault();
                    if (controllerType != null)
                    {
                        return new HttpControllerDescriptor(
                            SuperscribeConfig.HttpConfiguration,
                            controllerName,
                            controllerType);
                    }
                }
            }

            return this.baseSelector.SelectController(request);
        }
Example #2
0
        protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            var provider = request.GetRouteDataProvider();
            var info = provider.GetData(request);

            if (info.ExtraneousMatch || !info.FinalFunctionExecuted || info.Response is FinalFunction.ExecuteAndContinue)
            {
                return base.SendAsync(request, cancellationToken);
            }

            var responseMessage = info.Response as HttpResponseMessage;
            if (responseMessage != null)
            {
                return Task.FromResult(responseMessage);
            }

            var statusCode = info.Response as HttpStatusCode?;
            if (statusCode != null)
            {
                return Task.FromResult(request.CreateResponse(statusCode.Value));
            }

            return Task.FromResult(request.CreateResponse(HttpStatusCode.OK, info.Response));
        }