Пример #1
0
 public void Invalid_ServiceWithAction_Names()
 {
     Assert.Equal(false, DynamicApiServiceNameHelper.IsValidServiceNameWithAction(""));
     Assert.Equal(false, DynamicApiServiceNameHelper.IsValidServiceNameWithAction("task"));
     Assert.Equal(false, DynamicApiServiceNameHelper.IsValidServiceNameWithAction("task_service"));
     Assert.Equal(false, DynamicApiServiceNameHelper.IsValidServiceNameWithAction("task_service/create"));
 }
        /// <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)
        {
            //Get request and route data
            if (request == null)
            {
                return(base.SelectController(null));
            }

            var routeData = request.GetRouteData();

            if (routeData == null)
            {
                return(base.SelectController(request));
            }

            //Get serviceNameWithAction from route
            string serviceNameWithAction;

            if (!routeData.Values.TryGetValue("serviceNameWithAction", out serviceNameWithAction))
            {
                return(base.SelectController(request));
            }

            //Normalize serviceNameWithAction
            if (serviceNameWithAction.EndsWith("/"))
            {
                serviceNameWithAction = serviceNameWithAction.Substring(0, serviceNameWithAction.Length - 1);
                routeData.Values["serviceNameWithAction"] = serviceNameWithAction;
            }

            //Get the dynamic controller
            var hasActionName  = false;
            var controllerInfo = _dynamicApiControllerManager.FindOrNull(serviceNameWithAction);

            if (controllerInfo == null)
            {
                if (!DynamicApiServiceNameHelper.IsValidServiceNameWithAction(serviceNameWithAction))
                {
                    return(base.SelectController(request));
                }

                var serviceName = DynamicApiServiceNameHelper.GetServiceNameInServiceNameWithAction(serviceNameWithAction);
                controllerInfo = _dynamicApiControllerManager.FindOrNull(serviceName);
                if (controllerInfo == null)
                {
                    return(base.SelectController(request));
                }

                hasActionName = true;
            }

            //Create the controller descriptor
            var controllerDescriptor = new DynamicHttpControllerDescriptor(_configuration, controllerInfo);

            controllerDescriptor.Properties["__AbpDynamicApiControllerInfo"] = controllerInfo;
            controllerDescriptor.Properties["__AbpDynamicApiHasActionName"]  = hasActionName;
            return(controllerDescriptor);
        }
Пример #3
0
 public void Valid_Service_WithAction_Names()
 {
     Assert.Equal(true, DynamicApiServiceNameHelper.IsValidServiceNameWithAction("taskever/task/create"));
     Assert.Equal(true, DynamicApiServiceNameHelper.IsValidServiceNameWithAction("taskever/tasks/task/update"));
     Assert.Equal(true, DynamicApiServiceNameHelper.IsValidServiceNameWithAction("taskever/taskService/delete"));
     Assert.Equal(true, DynamicApiServiceNameHelper.IsValidServiceNameWithAction("taskever/tasks/taskService/getAllTasks"));
     Assert.Equal(true, DynamicApiServiceNameHelper.IsValidServiceNameWithAction("taskever/tasks/task_service/deleteTask"));
     Assert.Equal(true, DynamicApiServiceNameHelper.IsValidServiceNameWithAction("taskever/myNameSpace1/MyNameSpace2/mynamespace3/myserviceName/CreateNew"));
     Assert.Equal(true, DynamicApiServiceNameHelper.IsValidServiceNameWithAction("taskever/myName_Space1/MyName_Space2/mynamespace_3/myservice/test_action_Name"));
 }
Пример #4
0
        /// <summary>
        /// 该方法将被系统调用,根据请求选择合适的Controller
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public override HttpControllerDescriptor SelectController(HttpRequestMessage request)
        {
            if (null == request)
            {
                return(base.SelectController(null));
            }

            var routeData = request.GetRouteData();

            if (null == routeData)
            {
                return(base.SelectController(request));
            }
            string serviceNameWithAction;

            if (!routeData.Values.TryGetValue("serviceNameWithAction", out serviceNameWithAction))
            {
                return(base.SelectController(request));
            }

            if (Convert.ToString(serviceNameWithAction).EndsWith("/"))
            {
                serviceNameWithAction = serviceNameWithAction.Substring(0, serviceNameWithAction.Length - 1);
                routeData.Values["serviceNameWithAction"] = serviceNameWithAction;
            }
            var hasActionName  = false;
            var controllerInfo = _dynamicApiControllerManager.FindOrNull(serviceNameWithAction);

            if (null == controllerInfo)
            {
                if (!DynamicApiServiceNameHelper.IsValidServiceNameWithAction(serviceNameWithAction))
                {
                    return(base.SelectController(request));
                }
                var serviceName = DynamicApiServiceNameHelper.GetServiceNameInServiceNameWithAction(serviceNameWithAction);
                controllerInfo = _dynamicApiControllerManager.FindOrNull(serviceName);
                if (null == controllerInfo)
                {
                    return(base.SelectController(request));
                }
                hasActionName = true;
            }
            // 创建并返回Controller描述器
            var controllerDescriptor = new DynamicHttpControllerDescriptor(_configuration, controllerInfo);

            controllerDescriptor.Properties["__MSDynamicApiControllerInfo"] = controllerInfo;
            controllerDescriptor.Properties["__MSDynamicApiHasActionName"]  = hasActionName;

            return(controllerDescriptor);
        }
        /// <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();
                if (routeData != null)
                {
                    string serviceNameWithAction;
                    if (routeData.Values.TryGetValue("serviceNameWithAction", out serviceNameWithAction) && DynamicApiServiceNameHelper.IsValidServiceNameWithAction(serviceNameWithAction))
                    {
                        var serviceName    = DynamicApiServiceNameHelper.GetServiceNameInServiceNameWithAction(serviceNameWithAction);
                        var controllerInfo = DynamicApiControllerManager.FindOrNull(serviceName);
                        if (controllerInfo != null)
                        {
                            var controllerDescriptor = new DynamicHttpControllerDescriptor(_configuration, controllerInfo.ServiceName, controllerInfo.Type, controllerInfo.Filters);
                            controllerDescriptor.Properties["__AbpDynamicApiControllerInfo"] = controllerInfo;
                            return(controllerDescriptor);
                        }
                    }
                }
            }

            return(base.SelectController(request));
        }