private static ReflectedActionDescriptor CreateActionDescriptor( ReflectedActionModel action, ReflectedAttributeRouteModel controllerAttributeRoute, ControllerDescriptor controllerDescriptor) { var parameterDescriptors = new List <ParameterDescriptor>(); foreach (var parameter in action.Parameters) { var isFromBody = parameter.Attributes.OfType <FromBodyAttribute>().Any(); var paramDescriptor = new ParameterDescriptor() { Name = parameter.ParameterName, IsOptional = parameter.IsOptional }; if (isFromBody) { paramDescriptor.BodyParameterInfo = new BodyParameterInfo( parameter.ParameterInfo.ParameterType); } else { paramDescriptor.ParameterBindingInfo = new ParameterBindingInfo( parameter.ParameterName, parameter.ParameterInfo.ParameterType); } parameterDescriptors.Add(paramDescriptor); } var attributeRouteInfo = CreateAttributeRouteInfo( action.AttributeRouteModel, controllerAttributeRoute); var actionDescriptor = new ReflectedActionDescriptor() { Name = action.ActionName, ControllerDescriptor = controllerDescriptor, MethodInfo = action.ActionMethod, Parameters = parameterDescriptors, RouteConstraints = new List <RouteDataActionConstraint>(), AttributeRouteInfo = attributeRouteInfo }; actionDescriptor.DisplayName = string.Format( "{0}.{1}", action.ActionMethod.DeclaringType.FullName, action.ActionMethod.Name); return(actionDescriptor); }
private static void ReplaceAttributeRouteTokens( ReflectedActionDescriptor actionDescriptor, IList <string> routeTemplateErrors) { try { actionDescriptor.AttributeRouteInfo.Template = ReflectedAttributeRouteModel.ReplaceTokens( actionDescriptor.AttributeRouteInfo.Template, actionDescriptor.RouteValueDefaults); } catch (InvalidOperationException ex) { var message = Resources.FormatAttributeRoute_IndividualErrorMessage( actionDescriptor.DisplayName, Environment.NewLine, ex.Message); routeTemplateErrors.Add(message); } }
private static AttributeRouteInfo CreateAttributeRouteInfo( ReflectedAttributeRouteModel action, ReflectedAttributeRouteModel controller) { var combinedRoute = ReflectedAttributeRouteModel.CombineReflectedAttributeRouteModel( controller, action); if (combinedRoute == null) { return(null); } else { return(new AttributeRouteInfo() { Template = combinedRoute.Template, Order = combinedRoute.Order ?? DefaultAttributeRouteOrder, Name = combinedRoute.Name, }); } }