【问题标题】:IBodyModelValidator alternative for Asp .NetCore?Asp .Net Core 的身体模型验证器替代品?
【发布时间】:2019-03-21 10:39:15
【问题描述】:

我使用 Devexpress XPO 作为 ORM,我将使用 ASP.NET 核心创建一个 OData Web API。 Devexpress 在 ASP.NET 经典中创建了一个example,我有一个代码行(在 CS/ODataService/Globals.asax.cs,第 13 行)我无法“转换”,因为在 ASP.NET 中似乎没有对应的核心:

GlobalConfiguration.Configuration.Services.Replace(typeof(IBodyModelValidator), new CustomBodyModelValidator());

首先我对 ...Services.Replace 感到困惑,因为我没有在核心中找到合适的“命令”,而且(最重要的)核心中似乎没有 IBodyModelValidator 的对应项。我如何将其“转换”为 ASP.NET 核心?

任何建议将不胜感激!

【问题讨论】:

    标签: c# asp.net-core .net-core odata xpo


    【解决方案1】:

    我知道这很旧,但这是我在寻找答案时遇到的第一篇文章。以下是我解决问题的方法:

    public class CustomBodyModelValidator : ObjectModelValidator
    {
        public CustomBodyModelValidator(IModelMetadataProvider modelMetadataProvider, IList<IModelValidatorProvider> validatorProviders) 
            : base(modelMetadataProvider, validatorProviders) { }
    
        public override ValidationVisitor GetValidationVisitor(ActionContext actionContext, IModelValidatorProvider validatorProvider,
            ValidatorCache validatorCache, IModelMetadataProvider metadataProvider, ValidationStateDictionary validationState)
        {
            return new(actionContext, validatorProvider, validatorCache, metadataProvider, validationState)
            {
                ValidateComplexTypesIfChildValidationFails = true
            };
        }
        
        public override void Validate(ActionContext actionContext, ValidationStateDictionary validationState, string prefix, object model,
            ModelMetadata metadata, object container)
        {            
            //TODO: put your logic here
            
            base.Validate(actionContext, validationState, prefix, model, metadata, container);
        }
    }
    

    然后在Startup.cs注册:

    services.AddSingleton<IObjectModelValidator>(provider =>
    {
        var metadataProvider = provider.GetRequiredService<IModelMetadataProvider>();
        var options = provider.GetRequiredService<IOptions<MvcOptions>>().Value;
        return new CustomBodyModelValidator(metadataProvider, options.ModelValidatorProviders);
    });
    

    【讨论】:

      猜你喜欢
      • 2020-03-09
      • 1970-01-01
      • 1970-01-01
      • 2021-06-15
      • 2020-08-30
      • 2023-04-01
      • 1970-01-01
      • 2019-08-17
      • 2017-09-11
      相关资源
      最近更新 更多