C# 使用Fluent验证ASP.NET Core时出现NullReferenceException

C# 使用Fluent验证ASP.NET Core时出现NullReferenceException,c#,asp.net,validation,asp.net-core,fluentvalidation,C#,Asp.net,Validation,Asp.net Core,Fluentvalidation,每当我将fluent validation连接到我的asp.net core mvc应用程序时,我开始得到NullReferenceException,我已经遵循了github上asp.net core的集成指南,但我无法找出失败的地方。下面是我的模型类A验证程序和服务配置 public void配置服务(IServiceCollection服务) { 我尝试过删除模型中的可空属性,初始化它们,删除验证规则,但仍然得到相同的错误,我使用的是FluentValidation.AspNetCore

每当我将fluent validation连接到我的asp.net core mvc应用程序时,我开始得到NullReferenceException,我已经遵循了github上asp.net core的集成指南,但我无法找出失败的地方。下面是我的模型类A验证程序和服务配置

public void配置服务(IServiceCollection服务) {

我尝试过删除模型中的可空属性,初始化它们,删除验证规则,但仍然得到相同的错误,我使用的是FluentValidation.AspNetCore v7.2.0

如何修复此空异常

**编辑:


不是重复项,与Fluent Validation相关,我猜将Fluent Validation注入asp.net core时会发生异常,我的所有模型都不为null,从服务中删除AddFluentValidation()会删除错误,但我不能再使用Fluent Validation**


谢谢

我不确定您是否需要为您的特定应用程序启用客户端验证,但我通过禁用客户端验证(在阅读fluentvalidation问题日志后)对其进行了排序

我在启动中使用的代码是:-

services.AddMvc().AddFluentValidation(fv => 
{    
    fv.ConfigureClientsideValidation(enabled: false);
});

的可能重复项不是重复项,与Fluent Validation相关,我猜将Fluent Validation注入asp.net core时会发生异常,我的所有模型都不为null,删除AddFluentValidation()从服务中删除错误,但我无法使用fluent validation no more抱歉,我不确定,我提供的链接是其他人报告的问题,他们在更新到7.2.0版后遇到了与我相同的问题。不清楚此“修复”是否是配置FV的新方法(听起来有点像)或者只是一个设置,以停止这个问题,有些人有。。。
public class BookingSearchViewModel
  {
    [Display(Name ="Fecha de Recogida")]
    public DateTime? PickupDate { get; set; }

    [Display(Name = "Fecha de Entrega")]
    public DateTime? DropoffDate { get; set; }

    [Display(Name = "Transmisión")]
    public CarTransmissionEnum Transmission { get; set; }

    public List<SelectListItem> transmissionOptions { get; set; }

    public BookingSearchViewModel()
    {

      var list = new List<string>
      {
        "Manual",
        "Automatico"
      };

      this.transmissionOptions = new List<SelectListItem> {
        new SelectListItem
        {
          Text="Manual"
        },
        new SelectListItem
        {
          Text="Automatico"
        }
      };
    }

  }
  public class BookingSearchModelValidator : AbstractValidator<BookingSearchViewModel>
  {
    public BookingSearchModelValidator()
    {
      RuleFor(x => x.PickupDate).NotNull().GreaterThan(DateTime.Now).Must(FiveDaysFromToday);
      RuleFor(x => x.DropoffDate).NotNull().GreaterThan(x => x.PickupDate).Must((form, countyId) => BeAValidRange(form.PickupDate, form.DropoffDate));
      RuleFor(x => x.Transmission).IsInEnum();
    }

    private bool FiveDaysFromToday(DateTime? pickupDate)
    {
      if (pickupDate.HasValue)
      {
        var today = DateTimeOffset.UtcNow.Date.ToCST().DateTime;
        var days = pickupDate.Value.Date.ToCST().Subtract(today).Days;
        return days > 3;
      }
      return false;
    }

    private bool BeAValidRange(DateTimeOffset? pickupDate, DateTimeOffset? dropoffDate)
    {
      if (pickupDate.HasValue && dropoffDate.HasValue)
      {
        var days = dropoffDate.Value.Subtract(pickupDate.Value).Days;
        if (days > 2 && days < 29)
          return true;
      }
      return false;
    }

  }
NullReferenceException: Object reference not set to an instance of an object.
FluentValidation.AspNetCore.FluentValidationClientModelValidatorProvider.CreateValidators(ClientValidatorProviderContext context)
Microsoft.AspNetCore.Mvc.ModelBinding.Validation.CompositeClientModelValidatorProvider.CreateValidators(ClientValidatorProviderContext context)
Microsoft.AspNetCore.Mvc.Internal.ClientValidatorCache.GetValidators(ModelMetadata metadata, IClientModelValidatorProvider validatorProvider)
Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultValidationHtmlAttributeProvider.AddValidationAttributes(ViewContext viewContext, ModelExplorer modelExplorer, IDictionary<string, string> attributes)
Microsoft.AspNetCore.Mvc.ViewFeatures.ValidationHtmlAttributeProvider.AddAndTrackValidationAttributes(ViewContext viewContext, ModelExplorer modelExplorer, string expression, IDictionary<string, string> attributes)
Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.AddValidationAttributes(ViewContext viewContext, TagBuilder tagBuilder, ModelExplorer modelExplorer, string expression)
Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.GenerateInput(ViewContext viewContext, InputType inputType, ModelExplorer modelExplorer, string expression, object value, bool useViewData, bool isChecked, bool setId, bool isExplicitValue, string format, IDictionary<string, object> htmlAttributes)
Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.GenerateTextBox(ViewContext viewContext, ModelExplorer modelExplorer, string expression, object value, string format, object htmlAttributes)
Microsoft.AspNetCore.Mvc.TagHelpers.InputTagHelper.GenerateTextBox(ModelExplorer modelExplorer, string inputTypeHint, string inputType)
Microsoft.AspNetCore.Mvc.TagHelpers.InputTagHelper.Process(TagHelperContext context, TagHelperOutput output)
Microsoft.AspNetCore.Razor.TagHelpers.TagHelper.ProcessAsync(TagHelperContext context, TagHelperOutput output)
Microsoft.AspNetCore.Razor.Runtime.TagHelpers.TagHelperRunner+<RunAsync>d__0.MoveNext()
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
System.Runtime.CompilerServices.TaskAwaiter.GetResult()
AspNetCore._Views_Home_Index_cshtml+<<ExecuteAsync>b__39_7>d.MoveNext() in Index.cshtml
+
                  <input asp-for="PickupDate" class="form-control" placeholder="mm/dd/yyyy" required type="text" />
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
Microsoft.AspNetCore.Razor.Runtime.TagHelpers.TagHelperExecutionContext+<GetChildContentAsync>d__31.MoveNext()
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
Microsoft.AspNetCore.Mvc.TagHelpers.RenderAtEndOfFormTagHelper+<ProcessAsync>d__7.MoveNext()
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
Microsoft.AspNetCore.Razor.Runtime.TagHelpers.TagHelperRunner+<RunAsync>d__0.MoveNext()
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
System.Runtime.CompilerServices.TaskAwaiter.GetResult()
AspNetCore._Views_Home_Index_cshtml+<ExecuteAsync>d__39.MoveNext() in Index.cshtml
+
    var pixelImage = appSettings.Value.PixelImage;
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
Microsoft.AspNetCore.Mvc.Razor.RazorView+<RenderPageCoreAsync>d__16.MoveNext()
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
Microsoft.AspNetCore.Mvc.Razor.RazorView+<RenderPageAsync>d__15.MoveNext()
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
Microsoft.AspNetCore.Mvc.Razor.RazorView+<RenderAsync>d__14.MoveNext()
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor+<ExecuteAsync>d__22.MoveNext()
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor+<ExecuteAsync>d__21.MoveNext()
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
Microsoft.AspNetCore.Mvc.ViewResult+<ExecuteResultAsync>d__26.MoveNext()
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker+<InvokeResultAsync>d__19.MoveNext()
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker+<InvokeNextResultFilterAsync>d__24.MoveNext()
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResultExecutedContext context)
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Next(ref State next, ref Scope scope, ref object state, ref bool isCompleted)
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker+<InvokeNextResourceFilter>d__22.MoveNext()
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResourceExecutedContext context)
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Next(ref State next, ref Scope scope, ref object state, ref bool isCompleted)
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker+<InvokeFilterPipelineAsync>d__17.MoveNext()
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker+<InvokeAsync>d__15.MoveNext()
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
Microsoft.AspNetCore.Builder.RouterMiddleware+<Invoke>d__4.MoveNext()
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware+<Invoke>d__7.MoveNext()
public IActionResult Index()
    {
      var model = new BookingSearchViewModel();
      return View(model);
    }
services.AddMvc().AddFluentValidation(fv => 
{    
    fv.ConfigureClientsideValidation(enabled: false);
});