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); } } } } }
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); }
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])); }