2017-10-21 6 views
1

いつも私のasp.netコアmvc​​アプリケーションに流暢なバリデーションをフックアップするNullReferenceException、私はgithubのasp.netコアの統合ガイドに従ってきました。どこが失敗しているのか分かりません。私のモデルクラスのバリデータとサービスの構成Fluent Validationを使用しているときにNullReferenceExceptionが発生する

ます。public void ConfigureServices(IServiceCollectionサービス) {

var appSettings = Configuration.GetSection("AppSettings"); 
    services.Configure<AppSettings>(appSettings); 


    #region FluentValidation 
    services.AddTransient<IValidator<ContactFormModel>, ContactFormValidator>(); 
    services.AddTransient<IValidator<BookingSearchViewModel>, BookingSearchModelValidator>(); 
    services.AddTransient<IValidator<BookingCarSelectionViewModel>, BookingCarSelectionValidator>(); 
    services.AddTransient<IValidator<BookingClientDataModel>, BookingClientDataValidator>(); 
    #endregion 


    services.AddMvc().AddFluentValidation(); 
    services.AddAutoMapper(typeof(Startup));  
} 

私のモデルクラスとバリ

ある
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); 
    } 

を実行するM IはFluentValidation.AspNetCoreのV7.2.0を使用しています、私は検証ルールを削除し、それらを初期化し、モデルでNULL可能プロパティを削除しようとしましたが、私はまだ同じエラーを取得します。

このnull例外はどのように修正できますか?

**編集:

が重複していないが、(AddFluentValidationの除去、私のモデルのどれがヌルではない、asp.netコアに流暢検証を注入する際に例外が起こっている流暢検証と私の推測に関連しています)サービスからエラーが削除されますが、私はあなたの特定のアプリケーションのために、クライアント側の検証が必要な場合

+1

可能な複製(https://stackoverflow.com/questions/ 4660142/- 何であるか-とNullReferenceException-と-方法-DO-I-FIX-IT) –

+0

、asp.netコアに流暢検証を注入する際に例外が起こっている流暢検証と私の推測に関連して、重複していませんこれは、すでにGitHubの中で報告された私のモデルはいずれもサービスからAddFluentValidation()がエラーを除去する除去、ヌルではないが、その後、私は流暢な検証 –

答えて

0

わからないこれ以上**流暢な検証を

おかげで使用することはできませんが、私はすることによって、これを並べ替えるために管理クライアント側の妥当性チェックを無効にする(Fluentvalidationの問題ログを読んだ後にhere

私は私のスタートアップに使うコードは次のとおりです。 - [?何とNullReferenceExceptionある、と私はそれをどのように修正すればよい]の

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

こんにちはこれ以上を使用することはできません、されて? – dpp

+0

申し訳ありませんが、私が提供したリンクは、バージョン7.2.0にアップデートした後、私と同じ問題を抱えていた誰かから報告された問題です。これは、この「修正」は(それが一種のように聞こえる)FVまたは一部の人が持っているこの問題を停止するだけで設定を構成するための新しい方法であるかどうかは明らかではありません... – padigan

関連する問題