/// <summary>
        /// 创建一个 <see cref="T:System.Web.Http.Controllers.IHttpController"/> 对象。
        /// </summary>
        /// <returns>
        /// <see cref="T:System.Web.Http.Controllers.IHttpController"/> 对象。
        /// </returns>
        /// <param name="request">消息请求。</param><param name="controllerDescriptor">HTTP 控制器描述符。</param><param name="controllerType">控制器的类型。</param>
        public IHttpController Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType)
        {
            var routeData = request.GetRouteData();

            var controllerContext = new HttpControllerContext(_configuration, routeData, request);

            var areaName = routeData.GetAreaName();

            var serviceKey = (areaName + "/" + controllerDescriptor.ControllerName).ToLowerInvariant();

            Meta <Lazy <IHttpController> > info;
            var workContext = controllerContext.GetWorkContext();

            if (!TryResolve(workContext, serviceKey, out info))
            {
                return(null);
            }
            controllerContext.ControllerDescriptor =
                new HttpControllerDescriptor(_configuration, controllerDescriptor.ControllerName, controllerType);

            var controller = info.Value.Value;

            controllerContext.Controller = controller;

            return(controller);
        }
コード例 #2
0
        /// <summary>
        /// 为给定 <see cref="T:System.Net.Http.HttpRequestMessage"/> 选择 <see cref="T:System.Web.Http.Controllers.HttpControllerDescriptor"/>。
        /// </summary>
        /// <returns>
        /// 给定 <see cref="T:System.Net.Http.HttpRequestMessage"/> 的 <see cref="T:System.Web.Http.Controllers.HttpControllerDescriptor"/> 实例。
        /// </returns>
        /// <param name="request">HTTP 请求消息。</param>
        public override HttpControllerDescriptor SelectController(HttpRequestMessage request)
        {
            var routeData = request.GetRouteData();

            var areaName = routeData.GetAreaName();

            var controllerName = GetControllerName(request);

            //服务名称模式匹配的识别方法
            var serviceKey = (areaName + "/" + controllerName).ToLowerInvariant();

            var controllerContext = new HttpControllerContext(_configuration, routeData, request);

            Meta <Lazy <IHttpController> > info;
            var workContext = controllerContext.GetWorkContext();

            if (!TryResolve(workContext, serviceKey, out info))
            {
                return(null);
            }
            var type = (Type)info.Metadata["ControllerType"];

            return
                (new HttpControllerDescriptor(_configuration, controllerName, type));
        }
        public override HttpControllerDescriptor SelectController(HttpRequestMessage request)
        {
            var routeData = request.GetRouteData();

            // Determine the area name for the request, and fall back to stock Boying controllers
            var areaName = routeData.GetAreaName();

            var controllerName = base.GetControllerName(request);

            // Service name pattern matches the identification strategy
            var serviceKey = (areaName + "/" + controllerName).ToLowerInvariant();

            var controllerContext = new HttpControllerContext(_configuration, routeData, request);

            // Now that the request container is known - try to resolve the controller information
            Meta <Lazy <IHttpController> > info;
            var workContext = controllerContext.GetWorkContext();

            if (TryResolve(workContext, serviceKey, out info))
            {
                var type = (Type)info.Metadata["ControllerType"];

                return
                    (new HttpControllerDescriptor(_configuration, controllerName, type));
            }

            return(null);
        }
        public IHttpController Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType)
        {
            var routeData = request.GetRouteData();

            HttpControllerContext controllerContext = new HttpControllerContext(_configuration, routeData, request);

            // Determine the area name for the request, and fall back to stock Coevery controllers
            var areaName = routeData.GetAreaName();

            // Service name pattern matches the identification strategy
            var serviceKey = (areaName + "/" + controllerDescriptor.ControllerName).ToLowerInvariant();

            // Now that the request container is known - try to resolve the controller information
            Meta <Lazy <IHttpController> > info;
            var workContext = controllerContext.GetWorkContext();

            if (TryResolve(workContext, serviceKey, out info))
            {
                controllerContext.ControllerDescriptor =
                    new HttpControllerDescriptor(_configuration, controllerDescriptor.ControllerName, controllerType);

                var controller = info.Value.Value;

                controllerContext.Controller = controller;

                return(controller);
            }

            return(null);
        }