/// <summary> /// This class is called by Web API system to select action method from given controller. /// </summary> /// <param name="controllerContext">Controller context</param> /// <returns>Action to be used</returns> public override HttpActionDescriptor SelectAction(HttpControllerContext controllerContext) { object controllerInfoObj; if (controllerContext.ControllerDescriptor.Properties.TryGetValue("__AbpDynamicApiControllerInfo", out controllerInfoObj)) { //Get controller information which is selected by AbpHttpControllerSelector. var controllerInfo = controllerInfoObj as DynamicApiControllerInfo; if (controllerInfo == null) { throw new AbpException("__AbpDynamicApiControllerInfo in ControllerDescriptor.Properties is not a " + typeof(DynamicApiControllerInfo).FullName + " class."); } //Get action name var serviceNameWithAction = (controllerContext.RouteData.Values["serviceNameWithAction"] as string); if (serviceNameWithAction != null) { var actionName = DynamicApiServiceNameHelper.GetActionNameInServiceNameWithAction(serviceNameWithAction); //Get action information if (!controllerInfo.Actions.ContainsKey(actionName)) { throw new AbpException("There is no action " + actionName + " defined for api controller " + controllerInfo.ServiceName); } return(new DyanamicHttpActionDescriptor(controllerContext.ControllerDescriptor, controllerInfo.Actions[actionName].Method, controllerInfo.Actions[actionName].Filters)); } } return(base.SelectAction(controllerContext)); }
/// <summary> /// 此方法被系统调用,选择给定Controller的Action方法 /// </summary> /// <param name="controllerContext">Controller上下文</param> /// <returns></returns> public override HttpActionDescriptor SelectAction(HttpControllerContext controllerContext) { object controllerInfoObj; if (!controllerContext.ControllerDescriptor.Properties.TryGetValue("__MSDynamicApiControllerInfo", out controllerInfoObj)) { return(base.SelectAction(controllerContext)); } var controllerInfo = controllerInfoObj as DynamicApiControllerInfo; if (null == controllerInfo) { throw new MSException("__MSDynamicApiControllerInfo in ControllerDescriptor.Properties is not a " + typeof(DynamicApiControllerInfo).FullName + " class."); } var hasActionName = (bool)controllerContext.ControllerDescriptor.Properties["__MSDynamicApiHasActionName"]; if (!hasActionName) { return(GetActionDescriptorByCurrentHttpVerb(controllerContext, controllerInfo)); } //从路由中获取action名称 var serviceNameWithAction = controllerContext.RouteData.Values["serviceNameWithAction"] as string; if (null == serviceNameWithAction) { return(base.SelectAction(controllerContext)); } var actionName = DynamicApiServiceNameHelper.GetActionNameInServiceNameWithAction(serviceNameWithAction); return(GetActionDescriptorByActionName(controllerContext, controllerInfo, actionName)); }
/// <summary> /// This class is called by Web API system to select action method from given controller. /// </summary> /// <param name="controllerContext">Controller context</param> /// <returns>Action to be used</returns> public override HttpActionDescriptor SelectAction(HttpControllerContext controllerContext) { object controllerInfoObj; if (!controllerContext.ControllerDescriptor.Properties.TryGetValue("__AbpDynamicApiControllerInfo", out controllerInfoObj)) { return(GetDefaultActionDescriptor(controllerContext)); } //Get controller information which is selected by AbpHttpControllerSelector. var controllerInfo = controllerInfoObj as DynamicApiControllerInfo; if (controllerInfo == null) { throw new AbpException("__AbpDynamicApiControllerInfo in ControllerDescriptor.Properties is not a " + typeof(DynamicApiControllerInfo).FullName + " class."); } //No action name case var hasActionName = (bool)controllerContext.ControllerDescriptor.Properties["__AbpDynamicApiHasActionName"]; if (!hasActionName) { return(GetActionDescriptorByCurrentHttpVerb(controllerContext, controllerInfo)); } //Get action name from route var serviceNameWithAction = (controllerContext.RouteData.Values["serviceNameWithAction"] as string); if (serviceNameWithAction == null) { return(GetDefaultActionDescriptor(controllerContext)); } var actionName = DynamicApiServiceNameHelper.GetActionNameInServiceNameWithAction(serviceNameWithAction); return(GetActionDescriptorByActionName( controllerContext, controllerInfo, actionName )); }