Exemple #1
0
 private ResponseParameterMetadata GetResponseParameter(Type parameterType, RequestParameterKind parameterKind, MetadataValueProvider provider)
 {
     return(new ResponseParameterMetadata(parameterType, parameterKind)
     {
         ParameterName = provider.GetParameterName(),
         IsRequired = provider.GetIsRequired(),
         FileName = provider.GetContentFileName(),
         Culture = DefaultCultureProvider.Culture
     });
 }
Exemple #2
0
        private IEnumerable <RequestParameterMetadata> GetRequestParameters(string bindingSourceName, string namePrefix, Type parameterType, string memberName, IEnumerable <IRestValueFormatter> valueFormatters, MetadataValueProvider provider)
        {
            parameterType.AssertNotNull(nameof(parameterType));
            bindingSourceName.AssertNotNull(nameof(bindingSourceName));

            var parameterKind = GetParameterKind(parameterType, provider);

            if (parameterKind.HasValue)
            {
                var parameterName = $"{namePrefix}{provider.GetParameterName() ?? memberName}";
                var paramMetadata = GetRequestParameter(bindingSourceName, parameterName, parameterType, parameterKind.Value, provider);

                foreach (var formatter in valueFormatters)
                {
                    paramMetadata.AddValueFormatter(formatter);
                }

                yield return(paramMetadata);
            }
            else if (TypeDescriptor.GetProperties(parameterType).OfType <PropertyDescriptor>().SelectMany(x => x.Attributes.OfType <IParameterDefinition>()).Any())
            {
                foreach (var property in TypeDescriptor.GetProperties(parameterType).OfType <PropertyDescriptor>())
                {
                    var npv = provider.Nested(property.Attributes).Nested(TypeDescriptor.GetAttributes(parameterType)); //TODO

                    var parameterName   = $"{namePrefix}{npv.GetParameterName() ?? property.Name}";
                    var propBindingPath = npv.GetBindingPath().Append(property.Name);
                    var paramDef        = property.Attributes.OfType <IParameterDefinition>().FirstOrDefault();
                    if (paramDef != null)
                    {
                        var paramMetadata = GetRequestParameter(bindingSourceName, parameterName, parameterType, paramDef.ParameterKind, npv);
                        paramMetadata.BindingPath = propBindingPath;

                        foreach (var formatter in valueFormatters)
                        {
                            paramMetadata.AddValueFormatter(formatter);
                        }

                        yield return(paramMetadata);
                    }
                    else
                    {
                        var prefix       = namePrefix + npv.GetParameterPrefix();
                        var pathProvider = new BindingPathProvider(propBindingPath);

                        foreach (var paramMetadata in GetRequestParameters(bindingSourceName, prefix, property.PropertyType, property.Name, valueFormatters, npv.With(pathProvider)))
                        {
                            yield return(paramMetadata);
                        }
                    }
                }
            }
            else
            {
                var parameterName = $"{namePrefix}{provider.GetParameterName() ?? memberName}";
                var bodyParam     = GetRequestParameter(bindingSourceName, parameterName, parameterType, RequestParameterKind.Body, provider);

                foreach (var formatter in valueFormatters)
                {
                    bodyParam.AddValueFormatter(formatter);
                }

                yield return(bodyParam);
            }
        }