/// <summary>
        /// Use DB for localization
        /// </summary>
        /// <param name="provider"></param>
        /// <param name="localizer">localizer factory</param>
        /// <param name="mbErrors">Model binding errors</param>
        public static void SetLocalizedModelBindingErrorMessages(this DefaultModelBindingMessageProvider provider, ModelBindingErrors mbErrors, IStringLocalizer localizer)
        {
            provider.SetAttemptedValueIsInvalidAccessor((x, y)
                                                        => GetLoclizedModelBindingError(localizer, mbErrors.AttemptedValueIsInvalidAccessor, x, y));

            provider.SetMissingBindRequiredValueAccessor((x)
                                                         => GetLoclizedModelBindingError(localizer, mbErrors.MissingBindRequiredValueAccessor, x));

            provider.SetMissingKeyOrValueAccessor(()
                                                  => GetLoclizedModelBindingError(localizer, mbErrors.MissingKeyOrValueAccessor));

            provider.SetMissingRequestBodyRequiredValueAccessor(()
                                                                => GetLoclizedModelBindingError(localizer, mbErrors.MissingRequestBodyRequiredValueAccessor));

            provider.SetNonPropertyAttemptedValueIsInvalidAccessor((x)
                                                                   => GetLoclizedModelBindingError(localizer, mbErrors.NonPropertyAttemptedValueIsInvalidAccessor, x));

            provider.SetNonPropertyUnknownValueIsInvalidAccessor(()
                                                                 => GetLoclizedModelBindingError(localizer, mbErrors.NonPropertyUnknownValueIsInvalidAccessor));

            provider.SetNonPropertyValueMustBeANumberAccessor(()
                                                              => GetLoclizedModelBindingError(localizer, mbErrors.NonPropertyValueMustBeANumberAccessor));

            provider.SetUnknownValueIsInvalidAccessor((x)
                                                      => GetLoclizedModelBindingError(localizer, mbErrors.UnknownValueIsInvalidAccessor, x));

            provider.SetValueIsInvalidAccessor((x)
                                               => GetLoclizedModelBindingError(localizer, mbErrors.ValueIsInvalidAccessor, x));

            provider.SetValueMustBeANumberAccessor((x)
                                                   => GetLoclizedModelBindingError(localizer, mbErrors.ValueMustBeANumberAccessor, x));

            provider.SetValueMustNotBeNullAccessor((x)
                                                   => GetLoclizedModelBindingError(localizer, mbErrors.ValueMustNotBeNullAccessor, x));
        }
Пример #2
0
        /// <summary>
        /// Sets all properties of the <see cref="ModelBindingMessageProvider"/> to the specified culture of <paramref name="localizer"/>.
        /// </summary>
        /// <param name="provider">An instance of the <see cref="DefaultModelBindingMessageProvider"/>.</param>
        /// <param name="localizer">The service that provides localized strings.</param>
        public static void SetLocalizedModelBindingErrorMessages(this DefaultModelBindingMessageProvider provider, IStringLocalizer localizer)
        {
            provider.SetNonPropertyValueMustBeANumberAccessor(()
                                                              => localizer[ModelBindingResources.HtmlGeneration_NonPropertyValueMustBeNumber]);

            provider.SetValueIsInvalidAccessor((x)
                                               => localizer[ModelBindingResources.HtmlGeneration_ValueIsInvalid, x]);

            provider.SetValueMustBeANumberAccessor((x)
                                                   => localizer[ModelBindingResources.HtmlGeneration_ValueMustBeNumber, x]);

            provider.SetMissingKeyOrValueAccessor(()
                                                  => localizer[ModelBindingResources.KeyValuePair_BothKeyAndValueMustBePresent]);

            provider.SetMissingBindRequiredValueAccessor((x)
                                                         => localizer[ModelBindingResources.ModelBinding_MissingBindRequiredMember, x]);

            provider.SetMissingRequestBodyRequiredValueAccessor(()
                                                                => localizer[ModelBindingResources.ModelBinding_MissingRequestBodyRequiredMember]);

            provider.SetValueMustNotBeNullAccessor((x)
                                                   => localizer[ModelBindingResources.ModelBinding_NullValueNotValid, x]);

            provider.SetAttemptedValueIsInvalidAccessor((x, y)
                                                        => localizer[ModelBindingResources.ModelState_AttemptedValueIsInvalid, x, y]);

            provider.SetNonPropertyAttemptedValueIsInvalidAccessor((x)
                                                                   => localizer[ModelBindingResources.ModelState_NonPropertyAttemptedValueIsInvalid, x]);

            provider.SetNonPropertyUnknownValueIsInvalidAccessor(()
                                                                 => localizer[ModelBindingResources.ModelState_NonPropertyUnknownValueIsInvalid]);

            provider.SetUnknownValueIsInvalidAccessor((x)
                                                      => localizer[ModelBindingResources.ModelState_UnknownValueIsInvalid, x]);
        }
Пример #3
0
        /// <summary>
        /// Creates a new instance of <see cref="MvcOptions"/>.
        /// </summary>
        public MvcOptions()
        {
            CacheProfiles                 = new Dictionary <string, CacheProfile>(StringComparer.OrdinalIgnoreCase);
            Conventions                   = new List <IApplicationModelConvention>();
            Filters                       = new FilterCollection();
            FormatterMappings             = new FormatterMappings();
            InputFormatters               = new FormatterCollection <IInputFormatter>();
            OutputFormatters              = new FormatterCollection <IOutputFormatter>();
            ModelBinderProviders          = new List <IModelBinderProvider>();
            ModelBindingMessageProvider   = new DefaultModelBindingMessageProvider();
            ModelMetadataDetailsProviders = new List <IMetadataDetailsProvider>();
            ModelValidatorProviders       = new List <IModelValidatorProvider>();
            ValueProviderFactories        = new List <IValueProviderFactory>();

            _allowCombiningAuthorizeFilters = new CompatibilitySwitch <bool>(nameof(AllowCombiningAuthorizeFilters));
            _allowBindingHeaderValuesToNonStringModelTypes = new CompatibilitySwitch <bool>(nameof(AllowBindingHeaderValuesToNonStringModelTypes));
            _allowValidatingTopLevelNodes            = new CompatibilitySwitch <bool>(nameof(AllowValidatingTopLevelNodes));
            _inputFormatterExceptionPolicy           = new CompatibilitySwitch <InputFormatterExceptionPolicy>(nameof(InputFormatterExceptionPolicy), InputFormatterExceptionPolicy.AllExceptions);
            _suppressBindingUndefinedValueToEnumType = new CompatibilitySwitch <bool>(nameof(SuppressBindingUndefinedValueToEnumType));
            _enableEndpointRouting = new CompatibilitySwitch <bool>(nameof(EnableEndpointRouting));

            _switches = new ICompatibilitySwitch[]
            {
                _allowCombiningAuthorizeFilters,
                _allowBindingHeaderValuesToNonStringModelTypes,
                _allowValidatingTopLevelNodes,
                _inputFormatterExceptionPolicy,
                _suppressBindingUndefinedValueToEnumType,
                _enableEndpointRouting,
            };
        }
Пример #4
0
 public EntityModelMetadata(IModelMetadataProvider provider, ICompositeMetadataDetailsProvider detailsProvider,
                            EntityMetadataDetails details, DefaultModelBindingMessageProvider modelBindingMessageProvider) : base(
         provider, detailsProvider, details, modelBindingMessageProvider)
 {
     _details         = details;
     _detailsProvider = detailsProvider;
 }
Пример #5
0
        /// <summary>
        /// Creates a new instance of <see cref="MvcOptions"/>.
        /// </summary>
        public MvcOptions()
        {
            CacheProfiles                 = new Dictionary <string, CacheProfile>(StringComparer.OrdinalIgnoreCase);
            Conventions                   = new List <IApplicationModelConvention>();
            Filters                       = new FilterCollection();
            FormatterMappings             = new FormatterMappings();
            InputFormatters               = new FormatterCollection <IInputFormatter>();
            OutputFormatters              = new FormatterCollection <IOutputFormatter>();
            ModelBinderProviders          = new List <IModelBinderProvider>();
            ModelBindingMessageProvider   = new DefaultModelBindingMessageProvider();
            ModelMetadataDetailsProviders = new List <IMetadataDetailsProvider>();
            ModelValidatorProviders       = new List <IModelValidatorProvider>();
            ValueProviderFactories        = new List <IValueProviderFactory>();

            _inputFormatterExceptionPolicy           = new CompatibilitySwitch <InputFormatterExceptionPolicy>(nameof(InputFormatterExceptionPolicy), InputFormatterExceptionPolicy.AllExceptions);
            _suppressBindingUndefinedValueToEnumType = new CompatibilitySwitch <bool>(nameof(SuppressBindingUndefinedValueToEnumType));
            _allowShortCircuitingValidationWhenNoValidatorsArePresent = new CompatibilitySwitch <bool>(nameof(AllowShortCircuitingValidationWhenNoValidatorsArePresent));

            _switches = new ICompatibilitySwitch[]
            {
                _inputFormatterExceptionPolicy,
                _suppressBindingUndefinedValueToEnumType,
                _allowShortCircuitingValidationWhenNoValidatorsArePresent,
            };
        }
        internal static void SetLocalizedModelBindingErrorMessages <T>(this DefaultModelBindingMessageProvider provider) where T : class
        {
            provider.SetAttemptedValueIsInvalidAccessor((x, y)
                                                        => GetLoclizedModelBindingError <T>(ModelBindingMessages.ModelState_AttemptedValueIsInvalid, x, y));

            provider.SetMissingBindRequiredValueAccessor((x)
                                                         => GetLoclizedModelBindingError <T>(ModelBindingMessages.ModelBinding_MissingBindRequiredMember, x));

            provider.SetMissingKeyOrValueAccessor(()
                                                  => GetLoclizedModelBindingError <T>(ModelBindingMessages.KeyValuePair_BothKeyAndValueMustBePresent));

            provider.SetMissingRequestBodyRequiredValueAccessor(()
                                                                => GetLoclizedModelBindingError <T>(ModelBindingMessages.ModelBinding_MissingRequestBodyRequiredMember));

            provider.SetNonPropertyAttemptedValueIsInvalidAccessor((x)
                                                                   => GetLoclizedModelBindingError <T>(ModelBindingMessages.ModelState_NonPropertyAttemptedValueIsInvalid, x));

            provider.SetNonPropertyUnknownValueIsInvalidAccessor(()
                                                                 => GetLoclizedModelBindingError <T>(ModelBindingMessages.ModelState_NonPropertyUnknownValueIsInvalid));

            provider.SetNonPropertyValueMustBeANumberAccessor(()
                                                              => GetLoclizedModelBindingError <T>(ModelBindingMessages.HtmlGeneration_NonPropertyValueMustBeNumber));

            provider.SetUnknownValueIsInvalidAccessor((x)
                                                      => GetLoclizedModelBindingError <T>(ModelBindingMessages.ModelState_UnknownValueIsInvalid, x));

            provider.SetValueIsInvalidAccessor((x)
                                               => GetLoclizedModelBindingError <T>(ModelBindingMessages.HtmlGeneration_ValueIsInvalid, x));

            provider.SetValueMustBeANumberAccessor((x)
                                                   => GetLoclizedModelBindingError <T>(ModelBindingMessages.HtmlGeneration_ValueMustBeNumber, x));

            provider.SetValueMustNotBeNullAccessor((x)
                                                   => GetLoclizedModelBindingError <T>(ModelBindingMessages.ModelBinding_NullValueNotValid, x));
        }
        /// <summary>
        /// Create binding metadata and override <see cref="DefaultModelBindingMessageProvider"/> by custom instance of <see cref="ModelBindingErrors"/>
        /// </summary>
        /// <param name="context"></param>
        public void CreateBindingMetadata(BindingMetadataProviderContext context)
        {
            var provider = new DefaultModelBindingMessageProvider();

            provider.SetAttemptedValueIsInvalidAccessor((x, y) => localizer[mbErrors.AttemptedValueIsInvalidAccessor, x, y]);

            provider.SetMissingBindRequiredValueAccessor((x) => localizer[mbErrors.MissingBindRequiredValueAccessor, x]);

            provider.SetMissingKeyOrValueAccessor(() => localizer[mbErrors.MissingKeyOrValueAccessor]);

            provider.SetMissingRequestBodyRequiredValueAccessor(() => localizer[mbErrors.MissingRequestBodyRequiredValueAccessor]);

            provider.SetNonPropertyAttemptedValueIsInvalidAccessor((x) => localizer[mbErrors.NonPropertyAttemptedValueIsInvalidAccessor, x]);

            provider.SetNonPropertyUnknownValueIsInvalidAccessor(() => localizer[mbErrors.NonPropertyUnknownValueIsInvalidAccessor]);

            provider.SetNonPropertyValueMustBeANumberAccessor(() => localizer[mbErrors.NonPropertyValueMustBeANumberAccessor]);

            provider.SetUnknownValueIsInvalidAccessor((x) => localizer[mbErrors.UnknownValueIsInvalidAccessor, x]);

            provider.SetValueIsInvalidAccessor((x) => localizer[mbErrors.ValueIsInvalidAccessor, x]);

            provider.SetValueMustBeANumberAccessor((x) => localizer[mbErrors.ValueMustBeANumberAccessor, x]);

            provider.SetValueMustNotBeNullAccessor((x) => localizer[mbErrors.ValueMustNotBeNullAccessor, x]);

            context.BindingMetadata.ModelBindingMessageProvider = provider;
        }
Пример #8
0
    public DefaultModelMetadata(
        IModelMetadataProvider provider,
        ICompositeMetadataDetailsProvider detailsProvider,
        DefaultMetadataDetails details,
        DefaultModelBindingMessageProvider modelBindingMessageProvider)
        : base(details.Key)
    {
        if (provider == null)
        {
            throw new ArgumentNullException(nameof(provider));
        }

        if (detailsProvider == null)
        {
            throw new ArgumentNullException(nameof(detailsProvider));
        }

        if (details == null)
        {
            throw new ArgumentNullException(nameof(details));
        }

        if (modelBindingMessageProvider == null)
        {
            throw new ArgumentNullException(nameof(modelBindingMessageProvider));
        }

        _provider                    = provider;
        _detailsProvider             = detailsProvider;
        _details                     = details;
        _modelBindingMessageProvider = modelBindingMessageProvider;
    }
 public BodyAndOtherSourcesModelBinder(ILoggerFactory loggerFactory, IOptions <MvcOptions> options, IModelBinderFactory modelBinderFactory, IModelMetadataProvider modelMetadataProvider, ICompositeMetadataDetailsProvider detailsProvider)
 {
     _logger                      = loggerFactory.CreateLogger <BodyOrOtherSourcesModelBinder>();
     _modelBinderFactory          = modelBinderFactory;
     _modelMetadataProvider       = modelMetadataProvider;
     _modelBindingMessageProvider = options.Value.ModelBindingMessageProvider;
     _detailsProvider             = detailsProvider;
 }
Пример #10
0
 public BodyOrOtherSourcesModelBinder(IHttpRequestStreamReaderFactory readerFactory, ILoggerFactory loggerFactory, IOptions <MvcOptions> options, IModelBinderFactory modelBinderFactory, IModelMetadataProvider modelMetadataProvider, ICompositeMetadataDetailsProvider detailsProvider)
     : base(options.Value.InputFormatters, readerFactory, loggerFactory, options.Value)
 {
     _logger                      = loggerFactory.CreateLogger <BodyOrOtherSourcesModelBinder>();
     _modelBinderFactory          = modelBinderFactory;
     _providers                   = options.Value.ModelBinderProviders.ToArray();
     _modelMetadataProvider       = modelMetadataProvider;
     _modelBindingMessageProvider = options.Value.ModelBindingMessageProvider;
     _detailsProvider             = detailsProvider;
 }
Пример #11
0
 public static void Set(DefaultModelBindingMessageProvider messages)
 {
     messages.SetAttemptedValueIsInvalidAccessor((value, field) => Validation.For("InvalidField", field));
     messages.SetUnknownValueIsInvalidAccessor(field => Validation.For("InvalidField", field));
     messages.SetMissingBindRequiredValueAccessor(field => Validation.For("Required", field));
     messages.SetValueMustNotBeNullAccessor(field => Validation.For("Required", field));
     messages.SetValueIsInvalidAccessor(value => Validation.For("InvalidValue", value));
     messages.SetValueMustBeANumberAccessor(field => Validation.For("Numeric", field));
     messages.SetMissingKeyOrValueAccessor(() => Validation.For("RequiredValue"));
 }
Пример #12
0
 public ModelMessagesProvider(DefaultModelBindingMessageProvider messages)
 {
     messages.SetAttemptedValueIsInvalidAccessor((value, field) => String.Format(Validations.InvalidField, field));
     messages.SetUnknownValueIsInvalidAccessor((field) => String.Format(Validations.InvalidField, field));
     messages.SetMissingBindRequiredValueAccessor((field) => String.Format(Validations.Required, field));
     messages.SetValueMustNotBeNullAccessor((field) => String.Format(Validations.Required, field));
     messages.SetValueIsInvalidAccessor((value) => String.Format(Validations.InvalidValue, value));
     messages.SetValueMustBeANumberAccessor((field) => String.Format(Validations.Numeric, field));
     messages.SetMissingKeyOrValueAccessor(() => Validations.RequiredValue);
 }
Пример #13
0
 public static void UseTranslatedResources(this DefaultModelBindingMessageProvider messageProvider)
 {
     messageProvider.SetMissingBindRequiredValueAccessor(One(MvcModelBindingResource.MissingBindRequiredValueAccessor));
     messageProvider.SetMissingKeyOrValueAccessor(Zero(MvcModelBindingResource.MissingKeyOrValueAccessor));
     messageProvider.SetMissingRequestBodyRequiredValueAccessor(Zero(MvcModelBindingResource.MissingRequestBodyRequiredValueAccessor));
     messageProvider.SetValueMustNotBeNullAccessor(One(MvcModelBindingResource.ValueMustNotBeNullAccessor));
     messageProvider.SetAttemptedValueIsInvalidAccessor(Two(MvcModelBindingResource.AttemptedValueIsInvalidAccessor));
     messageProvider.SetNonPropertyAttemptedValueIsInvalidAccessor(One(MvcModelBindingResource.NonPropertyAttemptedValueIsInvalidAccessor));
     messageProvider.SetUnknownValueIsInvalidAccessor(One(MvcModelBindingResource.UnknownValueIsInvalidAccessor));
     messageProvider.SetNonPropertyUnknownValueIsInvalidAccessor(Zero(MvcModelBindingResource.NonPropertyUnknownValueIsInvalidAccessor));
     messageProvider.SetValueIsInvalidAccessor(One(MvcModelBindingResource.ValueIsInvalidAccessor));
     messageProvider.SetValueMustBeANumberAccessor(One(MvcModelBindingResource.ValueMustBeANumberAccessor));
     messageProvider.SetNonPropertyValueMustBeANumberAccessor(Zero(MvcModelBindingResource.NonPropertyValueMustBeANumberAccessor));
 }
Пример #14
0
 /// <summary>
 /// Creates a new instance of <see cref="MvcOptions"/>.
 /// </summary>
 public MvcOptions()
 {
     CacheProfiles                 = new Dictionary <string, CacheProfile>(StringComparer.OrdinalIgnoreCase);
     Conventions                   = new List <IApplicationModelConvention>();
     Filters                       = new FilterCollection();
     FormatterMappings             = new FormatterMappings();
     InputFormatters               = new FormatterCollection <IInputFormatter>();
     OutputFormatters              = new FormatterCollection <IOutputFormatter>();
     ModelBinderProviders          = new List <IModelBinderProvider>();
     ModelBindingMessageProvider   = new DefaultModelBindingMessageProvider();
     ModelMetadataDetailsProviders = new List <IMetadataDetailsProvider>();
     ModelValidatorProviders       = new List <IModelValidatorProvider>();
     ValueProviderFactories        = new List <IValueProviderFactory>();
 }
    public DefaultModelBindingMessageProvider(DefaultModelBindingMessageProvider originalProvider)
    {
        if (originalProvider == null)
        {
            throw new ArgumentNullException(nameof(originalProvider));
        }

        SetMissingBindRequiredValueAccessor(originalProvider.MissingBindRequiredValueAccessor);
        SetMissingKeyOrValueAccessor(originalProvider.MissingKeyOrValueAccessor);
        SetMissingRequestBodyRequiredValueAccessor(originalProvider.MissingRequestBodyRequiredValueAccessor);
        SetValueMustNotBeNullAccessor(originalProvider.ValueMustNotBeNullAccessor);
        SetAttemptedValueIsInvalidAccessor(originalProvider.AttemptedValueIsInvalidAccessor);
        SetNonPropertyAttemptedValueIsInvalidAccessor(originalProvider.NonPropertyAttemptedValueIsInvalidAccessor);
        SetUnknownValueIsInvalidAccessor(originalProvider.UnknownValueIsInvalidAccessor);
        SetNonPropertyUnknownValueIsInvalidAccessor(originalProvider.NonPropertyUnknownValueIsInvalidAccessor);
        SetValueIsInvalidAccessor(originalProvider.ValueIsInvalidAccessor);
        SetValueMustBeANumberAccessor(originalProvider.ValueMustBeANumberAccessor);
        SetNonPropertyValueMustBeANumberAccessor(originalProvider.NonPropertyValueMustBeANumberAccessor);
    }
 public static void Translate(this DefaultModelBindingMessageProvider source)
 {
     source.SetValueIsInvalidAccessor(
         (x) => "Valor inválido");
     source.SetValueMustBeANumberAccessor(
         (x) => "Informe somente números");
     source.SetMissingBindRequiredValueAccessor(
         (x) => "Campo obrigatório");
     source.SetAttemptedValueIsInvalidAccessor(
         (x, y) => $"O valor '{x}' não é válido para {y}.");
     source.SetMissingKeyOrValueAccessor(
         () => "Campo obrigatório");
     source.SetUnknownValueIsInvalidAccessor(
         (x) => "Valor inválido");
     source.SetValueMustNotBeNullAccessor(
         (x) => "Campo obrigatório");
     source.SetMissingRequestBodyRequiredValueAccessor(
         () => "Campo obrigatório");
 }
Пример #17
0
        public void should_use_zh_cn_model_binding_messages()
        {
            var messageProvider = new DefaultModelBindingMessageProvider();

            messageProvider.UseTranslatedResources();

            var messages = new[]
            {
                messageProvider.ValueIsInvalidAccessor("val"),
                messageProvider.AttemptedValueIsInvalidAccessor("abcd", "defg"),
                messageProvider.MissingBindRequiredValueAccessor("field"),
                messageProvider.MissingKeyOrValueAccessor(),
                messageProvider.UnknownValueIsInvalidAccessor("value"),
                messageProvider.MissingRequestBodyRequiredValueAccessor(),
                messageProvider.ValueMustBeANumberAccessor("value"),
                messageProvider.ValueMustNotBeNullAccessor("value"),
                messageProvider.NonPropertyAttemptedValueIsInvalidAccessor("prop"),
                messageProvider.NonPropertyUnknownValueIsInvalidAccessor(),
                messageProvider.NonPropertyValueMustBeANumberAccessor()
            };


            messages.ToList().ForEach(msg => Assert.True(HasChinese(msg)));
        }
Пример #18
0
 public CustomModelMetadata(ICustomModelMetadataProviderSingleton provider, ICompositeMetadataDetailsProvider detailsProvider, DefaultMetadataDetails details, DefaultModelBindingMessageProvider modelBindingMessageProvider)
     : base(provider, detailsProvider, details, modelBindingMessageProvider)
 {
     _customProvider = provider;
 }
 public ModelMessagesProviderTests()
 {
     messages = new DefaultModelBindingMessageProvider();
     ModelMessagesProvider.Set(messages);
 }