public HttpResponseMessage Get(string name)
        {
            //TODO: Define a special route for this as '/api/serviceproxies/serviceName' ?
            var controllerInfo = DynamicApiControllerManager.FindServiceController(name.ToPascalCase());

            if (controllerInfo == null)
            {
                throw new HttpException(404, "There is no such a service: " + name); //TODO: What to do if can not find?
            }

            //TODO: Caching script generation!
            var script = new DynamicScriptGenerator().GenerateFor(controllerInfo);

            HttpResponseMessage response = Request.CreateResponse(System.Net.HttpStatusCode.OK, script, new PlainTextFormatter());

            response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/x-javascript");
            return(response);
        }
示例#2
0
        /// <summary>
        /// This method is called by Web API system to select the controller for this request.
        /// </summary>
        /// <param name="request">Request object</param>
        /// <returns>The controller to be used</returns>
        public override HttpControllerDescriptor SelectController(HttpRequestMessage request)
        {
            if (request != null)
            {
                var routeData = request.GetRouteData();
                //routeData.Route.
                if (routeData != null)
                {
                    string serviceName;
                    if (routeData.Values.TryGetValue("serviceName", out serviceName))
                    {
                        var controllerInfo = DynamicApiControllerManager.FindServiceController(serviceName.ToPascalCase());
                        if (controllerInfo != null)
                        {
                            var desc = new HttpControllerDescriptor(_configuration, controllerInfo.Name, controllerInfo.Type);
                            desc.Properties["AbpDynamicApiControllerInfo"] = controllerInfo;
                            return(desc);
                        }
                    }
                }
            }

            return(base.SelectController(request));
        }