ApiParameterDescription CreateParameterDescriptionFromBinding(HttpParameterBinding parameterBinding, IServiceProvider serviceProvider, IAssembliesResolver assembliesResolver) { Contract.Requires(parameterBinding != null); Contract.Requires(serviceProvider != null); Contract.Requires(assembliesResolver != null); Contract.Ensures(Contract.Result <ApiParameterDescription>() != null); var descriptor = parameterBinding.Descriptor; var description = CreateParameterDescription(descriptor); if (parameterBinding.WillReadBody) { description.Source = FromBody; var parameterType = descriptor.ParameterType; var context = new TypeSubstitutionContext(serviceProvider, assembliesResolver.GetAssemblies(), ModelTypeBuilder); var substitutedType = parameterType.SubstituteIfNecessary(context); if (parameterType != substitutedType) { description.ParameterDescriptor = new ODataModelBoundParameterDescriptor(descriptor, substitutedType); } return(description); } if (WillReadUri(parameterBinding)) { description.Source = FromUri; } return(description); }
ApiParameterDescription CreateParameterDescriptionFromBinding(HttpParameterBinding parameterBinding, IServiceProvider serviceProvider) { var descriptor = parameterBinding.Descriptor; var description = CreateParameterDescription(descriptor); if (parameterBinding.WillReadBody) { description.Source = FromBody; var parameterType = descriptor.ParameterType; var context = new TypeSubstitutionContext(serviceProvider, ModelTypeBuilder); var substitutedType = parameterType.SubstituteIfNecessary(context); if (parameterType != substitutedType) { description.ParameterDescriptor = new ODataModelBoundParameterDescriptor(descriptor, substitutedType); } return(description); } if (WillReadUri(parameterBinding)) { description.Source = FromUri; } return(description); }
ApiParameterDescription CreateResult(ApiParameterDescriptionContext bindingContext, BindingSource source, string containerName) { var modelMetadata = bindingContext.ModelMetadata; var type = modelMetadata.ModelType; if (type.IsODataActionParameters() && Context.RouteContext.Operation?.IsAction() == true) { var action = (IEdmAction)Context.RouteContext.Operation; var apiVersion = Context.RouteContext.ApiVersion; var controller = Context.RouteContext.ActionDescriptor.ControllerName; type = Context.TypeBuilder.NewActionParameters(Context.Services, action, apiVersion, controller); } else { var context = new TypeSubstitutionContext(Context.Services, Context.TypeBuilder, Context.RouteContext.ApiVersion); type = type.SubstituteIfNecessary(context); } return(new ApiParameterDescription() { ModelMetadata = modelMetadata.SubstituteIfNecessary(type), Name = GetName(containerName, bindingContext), Source = source, Type = type, ParameterDescriptor = Parameter, }); }
ResponseDescription CreateResponseDescriptionWithRoute(HttpActionDescriptor actionDescriptor, IHttpRoute route) { var description = CreateResponseDescription(actionDescriptor); var serviceProvider = actionDescriptor.Configuration.GetODataRootContainer(route); var returnType = description.ResponseType ?? description.DeclaredType; var context = new TypeSubstitutionContext(serviceProvider, ModelTypeBuilder); description.ResponseType = returnType.SubstituteIfNecessary(context); return(description); }
ResponseDescription CreateResponseDescriptionWithRoute(HttpActionDescriptor actionDescriptor, IHttpRoute route) { Contract.Requires(actionDescriptor != null); Contract.Requires(actionDescriptor != null); Contract.Ensures(Contract.Result <ResponseDescription>() != null); var description = CreateResponseDescription(actionDescriptor); var serviceProvider = actionDescriptor.Configuration.GetODataRootContainer(route); var assembliesResolver = actionDescriptor.Configuration.Services.GetAssembliesResolver(); var returnType = description.ResponseType ?? description.DeclaredType; var context = new TypeSubstitutionContext(serviceProvider, assembliesResolver.GetAssemblies(), ModelTypeBuilder); description.ResponseType = returnType.SubstituteIfNecessary(context); return(description); }