private static HttpActionBinding GetActionBinding(HttpActionDescriptor actionDescriptor)
        {
            HttpControllerDescriptor controllerDescriptor = actionDescriptor.ControllerDescriptor;

            if (controllerDescriptor == null)
            {
                return(null);
            }

            IActionValueBinder actionValueBinder = controllerDescriptor.ActionValueBinder;
            HttpActionBinding  actionBinding     = actionValueBinder != null?actionValueBinder.GetBinding(actionDescriptor) : null;

            return(actionBinding);
        }
Exemplo n.º 2
0
        private static HttpActionBinding GetActionBinding(HttpActionDescriptor actionDescriptor)
        {
            HttpControllerDescriptor controllerDescriptor = actionDescriptor.ControllerDescriptor;

            if (controllerDescriptor == null)
            {
                return(null);
            }

            ServicesContainer  controllerServices = controllerDescriptor.Configuration.Services;
            IActionValueBinder actionValueBinder  = controllerServices.GetActionValueBinder();
            HttpActionBinding  actionBinding      = actionValueBinder != null?actionValueBinder.GetBinding(actionDescriptor) : null;

            return(actionBinding);
        }
Exemplo n.º 3
0
        static void Main(string[] args)
        {
            HttpConfiguration        configuration        = new HttpConfiguration();
            HttpControllerDescriptor controllerDescriptor = new HttpControllerDescriptor(configuration, "demo", typeof(DemoController));
            IHttpActionSelector      actionSelector       = configuration.Services.GetActionSelector();
            HttpActionDescriptor     actionDescriptor     = actionSelector.GetActionMapping(controllerDescriptor)["DemoAction"].First();
            IActionValueBinder       actionValueBinder    = configuration.Services.GetActionValueBinder();
            HttpActionBinding        actionBinding        = actionValueBinder.GetBinding(actionDescriptor);

            Console.WriteLine("{0,-18}{1}", "Parameter", "HttpParameterBinding");
            foreach (HttpParameterBinding parameterBinding in actionBinding.ParameterBindings)
            {
                Console.WriteLine("{0,-18}{1}", parameterBinding.Descriptor.ParameterName, parameterBinding.GetType().Name);
            }
        }
        private Collection <ApiDescription> InitializeApiDescriptions()
        {
            Collection <ApiDescription> apiDescriptions = new Collection <ApiDescription>();

            //webapi
            foreach (var item in base.ApiDescriptions)
            {
                apiDescriptions.Add(item);
            }

            //dynamic api
            var dynamicapiinfos = DynamicApiControllerManager.GetAll();

            foreach (var dynamicapiinfo in dynamicapiinfos)
            {
                foreach (var item in dynamicapiinfo.Actions)
                {
                    ApiDescription api        = new ApiDescription();
                    var            httpaction = new HttpControllerDescriptor();
                    httpaction.Configuration  = _config;
                    httpaction.ControllerType = dynamicapiinfo.ServiceInterfaceType;
                    httpaction.ControllerName = dynamicapiinfo.ServiceName;
                    var action = new DynamicHttpActionDescriptor(_abpWebApiConfiguration, httpaction, item.Value);
                    api.ActionDescriptor = action;
                    api.HttpMethod       = GetMethod(item.Value.Verb);
                    IActionValueBinder actionValueBinder = _config.Services.GetActionValueBinder();
                    HttpActionBinding  actionBinding     = actionValueBinder.GetBinding(action);

                    //parameter
                    IList <ApiParameterDescription> parameterDescriptions = CreateParameterDescription(actionBinding, action);
                    //using refletions to internal set
                    var prop = typeof(ApiDescription).GetProperties().Where(p => p.Name == "ParameterDescriptions").SingleOrDefault();
                    prop.SetValue(api, new Collection <ApiParameterDescription>(parameterDescriptions));


                    //resopnse
                    ResponseDescription responseDescription = CreateResponseDescription(action);
                    var prop2 = typeof(ApiDescription).GetProperties().Where(p => p.Name == "ResponseDescription").SingleOrDefault();
                    prop2.SetValue(api, responseDescription);

                    api.RelativePath = "api/services/" + dynamicapiinfo.ServiceName + "/" + item.Value.ActionName;

                    apiDescriptions.Add(api);
                }
            }
            return(apiDescriptions);
        }
        public HttpActionBinding GetBinding(HttpActionDescriptor actionDescriptor)
        {
            if (actionDescriptor == null)
            {
                throw Error.ArgumentNull("actionDescriptor");
            }

            HttpActionBinding binding = _innerActionValueBinder.GetBinding(actionDescriptor);

            if (binding == null)
            {
                return(null);
            }

            HttpParameterBinding[] parameterBindings = binding.ParameterBindings;

            if (parameterBindings != null)
            {
                for (int i = 0; i < binding.ParameterBindings.Length; i++)
                {
                    HttpParameterBinding parameterBinding = binding.ParameterBindings[i];

                    // Replace the formatter parameter binding with one that will attach the request.
                    // Note that we do not replace any other types, including derived types, as we do not have a way to
                    // decorate/compose these instances; there is no way we can add request attachment behavior to an
                    // arbitrary implementation of HttpParameterBinding. Any custom parameter bindings that do not
                    // attach the request may fail when using with OData (and the exception retured in that instance
                    // will explain the necessity of providing this behavior when implementing HttpParameterBinding for
                    // OData).
                    if (parameterBinding != null && parameterBinding is FormatterParameterBinding)
                    {
                        Contract.Assert(parameterBinding.Descriptor != null);
                        Contract.Assert(actionDescriptor.Configuration != null);
                        Contract.Assert(actionDescriptor.Configuration.Formatters != null);
                        binding.ParameterBindings[i] = new PerRequestParameterBinding(parameterBinding.Descriptor,
                                                                                      actionDescriptor.Configuration.Formatters);
                    }
                }
            }

            return(binding);
        }
Exemplo n.º 6
0
        // Creates wrapping tracers for all HttpParameterBindings
        HttpActionBinding IActionValueBinder.GetBinding(HttpActionDescriptor actionDescriptor)
        {
            HttpActionBinding actionBinding = _innerBinder.GetBinding(actionDescriptor);

            HttpParameterBinding[] parameterBindings    = actionBinding.ParameterBindings;
            HttpParameterBinding[] newParameterBindings = new HttpParameterBinding[parameterBindings.Length];
            for (int i = 0; i < newParameterBindings.Length; i++)
            {
                HttpParameterBinding parameterBinding = parameterBindings[i];

                // Itercept FormatterParameterBinding to replace its formatters
                FormatterParameterBinding formatterParameterBinding = parameterBinding as FormatterParameterBinding;
                newParameterBindings[i] = formatterParameterBinding != null
                                            ? (HttpParameterBinding) new FormatterParameterBindingTracer(formatterParameterBinding, _traceWriter)
                                            : (HttpParameterBinding) new HttpParameterBindingTracer(parameterBinding, _traceWriter);
            }

            HttpActionBinding newActionBinding = new HttpActionBinding(actionDescriptor, newParameterBindings);

            return(newActionBinding);
        }
Exemplo n.º 7
0
        // Creates wrapping tracers for all HttpParameterBindings
        HttpActionBinding IActionValueBinder.GetBinding(HttpActionDescriptor actionDescriptor)
        {
            HttpActionBinding actionBinding = _innerBinder.GetBinding(actionDescriptor);

            HttpParameterBinding[] parameterBindings    = actionBinding.ParameterBindings;
            HttpParameterBinding[] newParameterBindings = new HttpParameterBinding[parameterBindings.Length];
            for (int i = 0; i < newParameterBindings.Length; i++)
            {
                HttpParameterBinding parameterBinding = parameterBindings[i];

                // Itercept FormatterParameterBinding to replace its formatters
                FormatterParameterBinding formatterParameterBinding = parameterBinding as FormatterParameterBinding;
                newParameterBindings[i] = formatterParameterBinding != null
                                            ? (HttpParameterBinding) new FormatterParameterBindingTracer(formatterParameterBinding, _traceWriter)
                                            : (HttpParameterBinding) new HttpParameterBindingTracer(parameterBinding, _traceWriter);
            }

            // Replace the inner HttpActionBinding's parameter bindings with our tracing versions.
            // This allows each individual parameter binding to trace.
            actionBinding.ParameterBindings = newParameterBindings;

            // Then create an HttpActionBindingTracer to wrap the actual HttpActionBinding
            return(new HttpActionBindingTracer(actionBinding, _traceWriter));
        }