private void Bind(string methodName) { //创建FormatterParameterBinding对象 MethodInfo method = typeof(ContactsController).GetMethod(methodName); HttpActionDescriptor actionDescriptor = new ReflectedHttpActionDescriptor(this.ControllerContext.ControllerDescriptor, method); HttpParameterDescriptor parameterDescriptor = actionDescriptor.GetParameters().First(); MediaTypeFormatter[] formatters = new MediaTypeFormatter[] { new JsonMediaTypeFormatter() }; FormatterParameterBinding parameterBinding = new FormatterParameterBinding(parameterDescriptor, formatters, null); //创建HttpActionBinding并执行 HttpActionBinding actionBinding = new HttpActionBinding(actionDescriptor,new FormatterParameterBinding[] { parameterBinding }); HttpActionContext actionContext =new HttpActionContext(this.ControllerContext, actionDescriptor); try { actionBinding.ExecuteBindingAsync(actionContext, CancellationToken.None).Wait(); //获取绑定参数对象并打印相关数据 Contact contact = (Contact)actionContext.ActionArguments["contact"]; Console.WriteLine("{0,-12}: {1}", "Name", contact.Name); Console.WriteLine("{0,-12}: {1}", "Phone No.", contact.PhoneNo); Console.WriteLine("{0,-12}: {1}", "EmailAddress", contact.EmailAddress); Console.WriteLine("{0,-12}: {1}", "Address", contact.Address); } catch (Exception ex) { Console.WriteLine(ex.Message); } }
private void Bind(string methodName) { //创建FormatterParameterBinding对象 MethodInfo method = typeof(ContactsController).GetMethod(methodName); HttpActionDescriptor actionDescriptor = new ReflectedHttpActionDescriptor(this.ControllerContext.ControllerDescriptor, method); HttpParameterDescriptor parameterDescriptor = actionDescriptor.GetParameters().First(); MediaTypeFormatter[] formatters = new MediaTypeFormatter[] { new JsonMediaTypeFormatter() }; FormatterParameterBinding parameterBinding = new FormatterParameterBinding(parameterDescriptor, formatters, null); //创建HttpActionBinding并执行 HttpActionBinding actionBinding = new HttpActionBinding(actionDescriptor, new FormatterParameterBinding[] { parameterBinding }); HttpActionContext actionContext = new HttpActionContext(this.ControllerContext, actionDescriptor); try { actionBinding.ExecuteBindingAsync(actionContext, CancellationToken.None).Wait(); //获取绑定参数对象并打印相关数据 Contact contact = (Contact)actionContext.ActionArguments["contact"]; Console.WriteLine("{0,-12}: {1}", "Name", contact.Name); Console.WriteLine("{0,-12}: {1}", "Phone No.", contact.PhoneNo); Console.WriteLine("{0,-12}: {1}", "EmailAddress", contact.EmailAddress); Console.WriteLine("{0,-12}: {1}", "Address", contact.Address); } catch (Exception ex) { Console.WriteLine(ex.Message); } }
public IDictionary <string, TypeDocumentation> GetModelDocumentation(HttpActionDescriptor actionDescriptor) { var retDictionary = new Dictionary <string, TypeDocumentation>(); ReflectedHttpActionDescriptor reflectedActionDescriptor = actionDescriptor as ReflectedHttpActionDescriptor; if (reflectedActionDescriptor != null) { foreach (var parameterDescriptor in reflectedActionDescriptor.GetParameters()) { var paramType = parameterDescriptor.ParameterType; //if (!(paramType == typeof(QuizRequest))) // continue; if (!paramType.IsValueType) { TypeDocumentation typeDocs = new TypeDocumentation(); string selectExpression = String.Format(CultureInfo.InvariantCulture, TypeExpression, GetTypeName(paramType)); var typeNode = _documentNavigator.SelectSingleNode(selectExpression); if (typeNode != null) { XPathNavigator summaryNode; summaryNode = typeNode.SelectSingleNode("summary"); if (summaryNode != null) { typeDocs.Summary = summaryNode.Value; } } foreach (var prop in paramType.GetProperties()) { string propName = prop.Name; string propDocs = string.Empty; string propExpression = String.Format(CultureInfo.InvariantCulture, PropertyExpression, GetPropertyName(prop)); var propNode = _documentNavigator.SelectSingleNode(propExpression); if (propNode != null) { XPathNavigator summaryNode; summaryNode = propNode.SelectSingleNode("summary"); if (summaryNode != null) { propDocs = summaryNode.Value; } } typeDocs.PropertyDocumentation.Add(new PropertyDocumentation(propName, prop.PropertyType.Name, propDocs)); } retDictionary.Add(parameterDescriptor.ParameterName, typeDocs); } } } return(retDictionary); }
static void Main(string[] args) { HttpControllerDescriptor controllerDescriptor = new HttpControllerDescriptor(new HttpConfiguration(), "demo", typeof(DemoController)); MethodInfo methodInfo = typeof(DemoController).GetMethod("Get"); ReflectedHttpActionDescriptor actionDescriptor = new ReflectedHttpActionDescriptor(controllerDescriptor, methodInfo); Console.WriteLine("{0,-16}{1,-16}{2,-16}{3,-10}", "ParameterName", "ParameterType", "DefaultValue", "IsOptional"); foreach (ReflectedHttpParameterDescriptor parameter in actionDescriptor.GetParameters()) { Console.WriteLine("{0,-16}{1,-16}{2,-16}{3,-10}", parameter.ParameterName, parameter.ParameterType.Name, parameter.DefaultValue ?? "N/A", parameter.IsOptional); } }
public void GetParameters_Returns_ActionParameters() { Func <string, string, User> echoUserMethod = _controller.EchoUser; ReflectedHttpActionDescriptor actionDescriptor = new ReflectedHttpActionDescriptor { MethodInfo = echoUserMethod.Method }; Collection <HttpParameterDescriptor> parameterDescriptors = actionDescriptor.GetParameters(); Assert.Equal(2, parameterDescriptors.Count); Assert.NotNull(parameterDescriptors.Where(p => p.ParameterName == "firstName").FirstOrDefault()); Assert.NotNull(parameterDescriptors.Where(p => p.ParameterName == "lastName").FirstOrDefault()); }
public void GetParameters_Returns_ActionParameters() { Func<string, string, User> echoUserMethod = _controller.EchoUser; ReflectedHttpActionDescriptor actionDescriptor = new ReflectedHttpActionDescriptor { MethodInfo = echoUserMethod.Method }; Collection<HttpParameterDescriptor> parameterDescriptors = actionDescriptor.GetParameters(); Assert.Equal(2, parameterDescriptors.Count); Assert.NotNull(parameterDescriptors.Where(p => p.ParameterName == "firstName").FirstOrDefault()); Assert.NotNull(parameterDescriptors.Where(p => p.ParameterName == "lastName").FirstOrDefault()); }