Пример #1
0
        private void AddParameters(MethodCallExpression methodCall, IDictionary <string, string> values)
        {
            var attributeRecogniser = new AttributeRecogniser();
            var propertyReader      = new PropertyReader();

            var parameters = methodCall.Method.GetParameters();
            var arguments  = methodCall.Arguments;

            for (int i = 0; i < parameters.Length; i++)
            {
                var param         = parameters[i];
                var expectedValue = GetExpectedValue(arguments[i]);
                var isFromBody    = attributeRecogniser.IsFromBody(param);

                if (expectedValue != null || !isFromBody)
                {
                    if (propertyReader.IsSimpleType(param.ParameterType))
                    {
                        var expectedString = expectedValue != null?expectedValue.ToString() : null;

                        values.Add(param.Name, expectedString);
                    }
                    else
                    {
                        var objectFieldValues = propertyReader.Properties(expectedValue);
                        foreach (var field in objectFieldValues)
                        {
                            values.Add(field.Key.ToLowerInvariant(), field.Value);
                        }
                    }
                }
            }
        }
Пример #2
0
        private IList <RouteValue> ReadParameters(MethodCallExpression methodCall)
        {
            var values = new List <RouteValue>();

            var attributeRecogniser = new AttributeRecogniser();
            var propertyReader      = new PropertyReader();

            var parameters = methodCall.Method.GetParameters();
            var arguments  = methodCall.Arguments;

            for (int i = 0; i < parameters.Length; i++)
            {
                var param            = parameters[i];
                var expectedValue    = GetExpectedValue(arguments[i]);
                var isFromBody       = attributeRecogniser.IsFromBody(param);
                var routeValueOrigin = isFromBody ? RouteValueOrigin.Body : RouteValueOrigin.Unknown;
                if (expectedValue != null || !isFromBody)
                {
                    if (propertyReader.IsSimpleType(param.ParameterType))
                    {
                        var resultValue = new RouteValue(param.Name, expectedValue, routeValueOrigin);
                        values.Add(resultValue);
                    }
                    else
                    {
                        var objectFieldValues = propertyReader.PropertiesList(expectedValue, routeValueOrigin)
                                                .Where(x => x.Value != null);
                        values.AddRange(objectFieldValues);
                    }
                }
            }

            return(values);
        }
Пример #3
0
        private static IList <RouteValue> ProcessActionParam(HttpParameterDescriptor param, IHttpRouteData routeDataValues)
        {
            var propertyReader = new PropertyReader();

            if (propertyReader.IsSimpleType(param.ParameterType))
            {
                return(ProcessSimpleActionParam(param, routeDataValues));
            }

            return(ProcessCompoundActionParam(param, routeDataValues, propertyReader));
        }
Пример #4
0
        private static void ProcessActionParam(HttpParameterDescriptor param, HttpRouteData routeDataValues, Dictionary <string, string> result)
        {
            var propertyReader = new PropertyReader();

            if (propertyReader.IsSimpleType(param.ParameterType))
            {
                var paramName = param.ParameterName;
                AddParamWithRouteValue(paramName, routeDataValues.Values, result);
            }
            else
            {
                var fieldNames = propertyReader.SimplePropertyNames(param.ParameterType);
                foreach (var fieldName in fieldNames)
                {
                    AddParamWithRouteValue(fieldName.ToLowerInvariant(), routeDataValues.Values, result);
                }
            }
        }
Пример #5
0
 public void IntIsSimpleType()
 {
     Assert.That(reader.IsSimpleType(typeof(int)), Is.True);
 }