Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
            }
        }
Exemplo n.º 3
0
        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,
                });
            }
        }