mirror of https://github.com/abpframework/abp.git
2 changed files with 65 additions and 2 deletions
@ -0,0 +1,63 @@ |
|||
using System.ComponentModel.DataAnnotations; |
|||
using System.Linq; |
|||
using System.Reflection; |
|||
using Microsoft.AspNetCore.Mvc; |
|||
using Microsoft.AspNetCore.Mvc.ModelBinding; |
|||
using Microsoft.AspNetCore.Mvc.ModelBinding.Metadata; |
|||
using Microsoft.Extensions.DependencyInjection; |
|||
using Microsoft.Extensions.Options; |
|||
using Volo.Abp.DependencyInjection; |
|||
|
|||
namespace Volo.Abp.AspNetCore.Mvc.ModelBinding.Metadata |
|||
{ |
|||
[Dependency(ServiceLifetime.Singleton, ReplaceServices = true)] |
|||
[ExposeServices(typeof(IModelMetadataProvider))] |
|||
public class AbpModelMetadataProvider : DefaultModelMetadataProvider |
|||
{ |
|||
private static readonly PropertyInfo ValidationAttributeErrorMessageStringProperty; |
|||
|
|||
static AbpModelMetadataProvider() |
|||
{ |
|||
ValidationAttributeErrorMessageStringProperty = typeof(ValidationAttribute) |
|||
.GetProperty("ErrorMessageString", BindingFlags.Instance | BindingFlags.NonPublic); |
|||
} |
|||
|
|||
public AbpModelMetadataProvider(ICompositeMetadataDetailsProvider detailsProvider) |
|||
: base(detailsProvider) |
|||
{ |
|||
} |
|||
|
|||
public AbpModelMetadataProvider(ICompositeMetadataDetailsProvider detailsProvider, IOptions<MvcOptions> optionsAccessor) |
|||
: base(detailsProvider, optionsAccessor) |
|||
{ |
|||
} |
|||
|
|||
protected override DefaultMetadataDetails[] CreatePropertyDetails(ModelMetadataIdentity key) |
|||
{ |
|||
var details = base.CreatePropertyDetails(key); |
|||
|
|||
foreach (var detail in details) |
|||
{ |
|||
NormalizeMetadataDetail(detail); |
|||
} |
|||
|
|||
return details; |
|||
} |
|||
|
|||
private void NormalizeMetadataDetail(DefaultMetadataDetails detail) |
|||
{ |
|||
foreach (var validationAttribute in detail.ModelAttributes.Attributes.OfType<ValidationAttribute>()) |
|||
{ |
|||
NormalizeValidationAttrbute(validationAttribute); |
|||
} |
|||
} |
|||
|
|||
protected virtual void NormalizeValidationAttrbute(ValidationAttribute validationAttribute) |
|||
{ |
|||
if (validationAttribute.ErrorMessage == null) |
|||
{ |
|||
validationAttribute.ErrorMessage = ValidationAttributeErrorMessageStringProperty.GetValue(validationAttribute) as string; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
Loading…
Reference in new issue