コード例 #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
		public void ParametersCanBeCheckedForFromBody()
		{
			Expression<Func<int>> expr = () => WithFromBodyParams.Method(1, "");
			var methodCall = (MethodCallExpression)expr.Body;
			var parameters = methodCall.Method.GetParameters();

			AttributeRecogniser recogniser = new AttributeRecogniser();

			Assert.IsFalse(recogniser.IsFromBody(parameters[0]));
			Assert.IsTrue(recogniser.IsFromBody(parameters[1]));
		}