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