internal ControllerActionParameter(string parameterName, object parameterValue, IBindingSourceMetadata metadata, IControllerAction controllerAction)
 {
     ParameterName         = parameterName;
     ParameterValue        = parameterValue;
     BindingSourceMetadata = metadata;
     Action = controllerAction;
 }
Exemplo n.º 2
0
        // 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
            });
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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);
        }