private static void SetParameterValue(ActionExecutionModel model, ParameterSpecification parameterSpecification, object value) { if (value == null) { throw new ArgumentNullException(nameof(value)); } model.Parameters[parameterSpecification.Key] = value; }
internal ActionParameterMetadata( IModelMetadataProvider provider, ICompositeMetadataDetailsProvider detailsProvider, ParameterSpecification parameterSpecification, ActionExecutionModel containerModel) : base(provider, detailsProvider, CreateMetadataDetails(parameterSpecification, containerModel)) { this.parameterSpecification = parameterSpecification; }
private static object GetParameterValue(ActionExecutionModel model, ParameterSpecification parameterSpecification) { if (model.Parameters.TryGetValue(parameterSpecification.Key, out object value)) { return(value); } else { return(parameterSpecification.GetDefaultValue()); } }
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()); }
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); }
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; }
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); }