Exemplo n.º 1
0
        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);
        }
Exemplo n.º 5
0
        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);
        }