コード例 #1
0
        private static void SetParameterValue(ActionExecutionModel model, ParameterSpecification parameterSpecification, object value)
        {
            if (value == null)
            {
                throw new ArgumentNullException(nameof(value));
            }

            model.Parameters[parameterSpecification.Key] = value;
        }
コード例 #2
0
 internal ActionParameterMetadata(
     IModelMetadataProvider provider,
     ICompositeMetadataDetailsProvider detailsProvider,
     ParameterSpecification parameterSpecification,
     ActionExecutionModel containerModel)
     : base(provider, detailsProvider, CreateMetadataDetails(parameterSpecification, containerModel))
 {
     this.parameterSpecification = parameterSpecification;
 }
コード例 #3
0
 private static object GetParameterValue(ActionExecutionModel model, ParameterSpecification parameterSpecification)
 {
     if (model.Parameters.TryGetValue(parameterSpecification.Key, out object value))
     {
         return(value);
     }
     else
     {
         return(parameterSpecification.GetDefaultValue());
     }
 }
コード例 #4
0
        internal ActionExecutionModelMetadata(
            IModelMetadataProvider modelMetadataProvider,
            ICompositeMetadataDetailsProvider detailsProvider,
            ActionExecutionModel model)
            : base(modelMetadataProvider, detailsProvider, CreateMetadataDetails(model))
        {
            this.model = model;
            this.modelMetadataProvider = modelMetadataProvider;
            this.detailsProvider       = detailsProvider;

            this.properties = new ModelPropertyCollection(CreatePropertiesMetadata());
        }
コード例 #5
0
        private static DefaultMetadataDetails CreateMetadataDetails(ActionExecutionModel model)
        {
            if (model == null)
            {
                throw new ArgumentNullException(nameof(model));
            }

            var modelMetadataIdentity = ModelMetadataIdentity.ForType(model.GetType());

            var modelAttributes = ModelAttributes.GetAttributesForType(model.GetType());

            var modelMetadataDetails = new DefaultMetadataDetails(modelMetadataIdentity, modelAttributes);

            return(modelMetadataDetails);
        }
コード例 #6
0
            internal ActionExecutionModelMetadataProviderScope(
                LogicController <U, D, S> controller,
                ActionExecutionModel actionExecutionModel)
            {
                this.controller           = controller;
                this.actionExecutionModel = actionExecutionModel;

                originalModelMetadataProvider = controller.MetadataProvider;
                originalObjectModelValidator  = controller.ObjectValidator;

                controller.MetadataProvider = this;

                var mvcOptions = controller.HttpContext.RequestServices.GetRequiredService <IOptions <MvcOptions> >().Value;

                controller.ObjectValidator = new MetadataObjectModelValidator(
                    this,
                    mvcOptions.ModelValidatorProviders,
                    mvcOptions);
            }
        /// <summary>
        /// Obtain <see cref="ActionExecutionModelMetadata"/>
        /// for an instance derived from <see cref="ActionExecutionModel"/>.
        /// </summary>
        /// <param name="metadataProvider">The metadata provider to </param>
        /// <param name="metadataDetailsProvider"></param>
        /// <param name="actionExecutionModel"></param>
        /// <returns>Returns the model metadata.</returns>
        public static ActionExecutionModelMetadata GetMetadata(
            IModelMetadataProvider metadataProvider,
            ICompositeMetadataDetailsProvider metadataDetailsProvider,
            ActionExecutionModel actionExecutionModel)
        {
            if (metadataProvider == null)
            {
                throw new ArgumentNullException(nameof(metadataProvider));
            }
            if (metadataDetailsProvider == null)
            {
                throw new ArgumentNullException(nameof(metadataDetailsProvider));
            }
            if (actionExecutionModel == null)
            {
                throw new ArgumentNullException(nameof(actionExecutionModel));
            }

            var key = new ActionExecutionModelMetadataKey(actionExecutionModel, metadataProvider, metadataDetailsProvider);

            return(metadataCache.Get(key));
        }
        /// <summary>
        /// Create.
        /// </summary>
        internal ActionExecutionModelMetadataKey(
            ActionExecutionModel model,
            IModelMetadataProvider metadataProvider,
            ICompositeMetadataDetailsProvider metadataDetailsProvider)
        {
            if (model == null)
            {
                throw new ArgumentNullException(nameof(model));
            }
            if (metadataProvider == null)
            {
                throw new ArgumentNullException(nameof(metadataProvider));
            }
            if (metadataDetailsProvider == null)
            {
                throw new ArgumentNullException(nameof(metadataDetailsProvider));
            }

            this.Model                   = model;
            this.MetadataProvider        = metadataProvider;
            this.MetadataDetailsProvider = metadataDetailsProvider;
        }
コード例 #9
0
        private static DefaultMetadataDetails CreateMetadataDetails(ParameterSpecification parameterSpecification, ActionExecutionModel containerModel)
        {
            if (parameterSpecification == null)
            {
                throw new ArgumentNullException(nameof(parameterSpecification));
            }
            if (containerModel == null)
            {
                throw new ArgumentNullException(nameof(containerModel));
            }

#pragma warning disable CS0618 // Type or member is obsolete
            var parameterMetadataIdentity = ModelMetadataIdentity.ForProperty(parameterSpecification.Type, parameterSpecification.Key, containerModel.GetType());
#pragma warning restore CS0618 // Type or member is obsolete

            var parameterAttributes = ModelAttributes.GetAttributesForProperty(containerModel.GetType(), nullPropertyInfo, parameterSpecification.Type);

            var propertyMetadataDetails = new DefaultMetadataDetails(
                parameterMetadataIdentity,
                parameterAttributes)
            {
                PropertyGetter     = thisModel => GetParameterValue((ActionExecutionModel)thisModel, parameterSpecification),
                PropertySetter     = (thisModel, value) => SetParameterValue((ActionExecutionModel)thisModel, parameterSpecification, value),
                ValidationMetadata = new ValidationMetadata
                {
                    IsRequired = parameterSpecification.IsRequired
                },
                DisplayMetadata = new DisplayMetadata()
            };

            var dataTypeAttribute = parameterSpecification.ValidationAttributes.OfType <DataTypeAttribute>().FirstOrDefault();

            if (dataTypeAttribute != null)
            {
                propertyMetadataDetails.DisplayMetadata.DataTypeName = dataTypeAttribute.GetDataTypeName();
            }

            foreach (var attribute in parameterSpecification.ValidationAttributes)
            {
                propertyMetadataDetails.ValidationMetadata.ValidatorMetadata.Add(attribute);
            }

            foreach (var attribute in parameterSpecification.Type.GetCustomAttributes <ValidationAttribute>(true))
            {
                propertyMetadataDetails.ValidationMetadata.ValidatorMetadata.Add(attribute);
            }

            if (propertyMetadataDetails.ValidationMetadata.ValidatorMetadata.Count > 0 || typeof(IValidatableObject).IsAssignableFrom(parameterSpecification.Type))
            {
                propertyMetadataDetails.ValidationMetadata.HasValidators = true;
            }

            return(propertyMetadataDetails);
        }