internal ControllerActionParameter(string parameterName, object parameterValue, IBindingSourceMetadata metadata, IControllerAction controllerAction) { ParameterName = parameterName; ParameterValue = parameterValue; BindingSourceMetadata = metadata; Action = controllerAction; }
// ToDo : checken met FromQuery(Name=custom) als upgrade MVC packages is gebeurd private ParameterDescriptor CreateArgument(string name, Type type, IBindingSourceMetadata metadata) { return(new ParameterDescriptor() { BindingInfo = BindingInfo.GetBindingInfo(new[] { metadata }), Name = name, ParameterType = type }); }
public void Apply(ParameterModel parameter) { if (!serviceType.IsAssignableFrom(parameter.Action.Controller.ControllerType)) { return; } var actionParams = parameter.Action.ActionMethod.GetParameters(); var method = serviceType.GetMethods().FirstOrDefault(mth => parameter.Action.ActionMethod.Name == mth.Name && !actionParams.Except(mth.GetParameters(), new ModelConventionHelper.ParameterInfoEqualityComparer()).Any()); if (method == null) { return; } var theParam = parameter.ParameterInfo; var isGetMethod = method.GetCustomAttribute <HttpGetAttribute>(true) != null; if (theParam == null) { return; } var paramAttrs = theParam.GetCustomAttributes().OfType <HttpContentAttribute>().Select(att => att is FormContentAttribute ? (IBindingSourceMetadata) new FromQueryAttribute() : new FromBodyAttribute()); //当没有指定请求Content-Type时 if (!paramAttrs.Any()) { //默认配置:如果参数类型为uri参数或者是uri参数数组,并且Action且为Get方法,则从QueryString取(框架默认,所以直接返回),否则从Body取 if (theParam.ParameterType.IsUriParameterType() || theParam.ParameterType.IsUriParameterTypeArray()) { return; } if (isGetMethod) { paramAttrs = new[] { new FromQueryAttribute() }; } else { paramAttrs = new IBindingSourceMetadata[] { new FromBodyAttribute(), new FromFormAttribute() }; } } parameter.BindingInfo = BindingInfo.GetBindingInfo(paramAttrs); }
public void Apply(ParameterModel parameter) { if (!serviceType.IsAssignableFrom(parameter.Action.Controller.ControllerType)) { return; } var actionParams = parameter.Action.ActionMethod.GetParameters(); var method = serviceType.GetMethods().FirstOrDefault(mth => parameter.Action.ActionMethod.Name == mth.Name && !actionParams.Except(mth.GetParameters(), new ModelConventionHelper.ParameterInfoEqualityComparer()).Any()); if (method == null) { return; } var theParam = parameter.ParameterInfo; var isGetMethod = method.GetCustomAttribute <HttpGetAttribute>(true) != null; if (theParam == null) { return; } var paramAttrs = new IBindingSourceMetadata[] { }; if (theParam.ParameterType.IsUriParameterType() || theParam.ParameterType.IsUriParameterTypeArray()) { return; } if (isGetMethod) { paramAttrs = new[] { new FromQueryAttribute() }; } else { paramAttrs = new IBindingSourceMetadata[] { new FromBodyAttribute(), new FromFormAttribute() }; } parameter.BindingInfo = BindingInfo.GetBindingInfo(paramAttrs); }
public void FilterReturnsItself_ForAnyClassRegisteredAsGenericParam(IBindingSourceMetadata metadata) { // Arrange var values = new Dictionary<string, object>(StringComparer.OrdinalIgnoreCase); var valueProvider1 = GetMockValueProvider("Test"); var valueProvider2 = GetMockValueProvider("Unrelated"); var provider = new CompositeValueProvider() { valueProvider1.Object, valueProvider2.Object }; // Act var result = provider.Filter(metadata.BindingSource); // Assert var valueProvider = Assert.IsType<CompositeValueProvider>(result); var filteredProvider = Assert.Single(valueProvider); // should not be unrelated metadata. Assert.Same(valueProvider1.Object, filteredProvider); }
public void FilterReturnsItself_ForAnyClassRegisteredAsGenericParam(IBindingSourceMetadata metadata) { // Arrange var values = new Dictionary <string, object>(StringComparer.OrdinalIgnoreCase); var valueProvider1 = GetMockValueProvider("Test"); var valueProvider2 = GetMockValueProvider("Unrelated"); var provider = new CompositeValueProvider() { valueProvider1.Object, valueProvider2.Object }; // Act var result = provider.Filter(metadata.BindingSource); // Assert var valueProvider = Assert.IsType <CompositeValueProvider>(result); var filteredProvider = Assert.Single(valueProvider); // should not be unrelated metadata. Assert.Same(valueProvider1.Object, filteredProvider); }