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); }
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)); }