2017-02-03 1 views
1

J'utilise la bibliothèque "FluentValidation.AspNetCore": "6.4.0-beta3" dans .netcore WebApi dans un projet. Vous pouvez voir la structure du projet ci-dessous. Bibliothèque fonctionne bien si je place le code CurrencyDTO.cs à l'article 2 (Projet FH.WebAPI) et si le même code placé dans la section 1 (Bibliothèque de classes DTO) sa ne fonctionne pas. Et exigence est que je dois placer le code dans la bibliothèque de classe FH.Common. Y at-il around.I de travail ont la recherche, mais n'a pas trouvé quelque choseFluentValidation.AspNetCore ne fonctionne pas dans Bibliothèque de classes

Structure du projet

Project Structure

CurrencyDTO.cs

[Validator(typeof(CurrencyDTOValidator))] 
    public class CurrencyDTO 
    { 
     public int Id { get { return CurrencyId; } } 
     public int CurrencyId { get; set; } 
     public string Name { get; set; } 
     public string Symbol { get; set; } 

    } 

    public class CurrencyDTOValidator : AbstractValidator<CurrencyDTO> 
    { 
     public CurrencyDTOValidator() 
     { 
      RuleFor(x => x.Name).NotEmpty().NotNull().WithMessage("The currency 'Name' is required.") 
             .Length(0, 250).WithMessage("The currency 'Name' cannot be more than 250 characters."); 

      RuleFor(x => x.Symbol).NotEmpty().WithMessage("The currency Symbol is required."); 


     } 
    } 

configuration de la bibliothèque

étape 1). Ajouter à project.json

{ 
    "dependencies": { 
    "Autofac": "4.3.0", 
    "Autofac.Extensions.DependencyInjection": "4.0.0", 
    "AutoMapper": "5.2.0", 
    "EntityFramework": "6.1.3", 
    "FH.Business": "1.0.0-*", 
    "FH.Common": "1.0.0-*", 
    "JWT": "1.4.1-beta", 
    "Microsoft.AspNet.Http.Extensions": "1.0.0-rc1-final", 
    "Microsoft.AspNet.WebApi.Client": "5.2.3", 
    "Microsoft.AspNet.WebApi.Core": "5.2.3", 
    "Microsoft.AspNetCore.Authentication.JwtBearer": "1.1.0", 
    "Microsoft.AspNetCore.Diagnostics": "1.1.0", 
    "Microsoft.AspNetCore.Mvc": "1.1.1", 
    "Microsoft.AspNetCore.Razor.Tools": { 
     "version": "1.0.0-preview2-final", 
     "type": "build" 
    }, 
    //other libraries.. 
    "FluentValidation.AspNetCore": "6.4.0-beta3" //<------Here 
    }, 

    "tools": { 
    "BundlerMinifier.Core": "2.0.238", 
    "Microsoft.AspNetCore.Razor.Tools": "1.0.0-preview2-final", 
    "Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final" 
    }, 

    "frameworks": { 
    "net461": { 
     "frameworkAssemblies": { 
     "System.Drawing": "4.0.0.0" 
     } 
    } 
    }, 

    "buildOptions": { 
    "emitEntryPoint": true, 
    "preserveCompilationContext": true 
    }, 

    "publishOptions": { 
    "include": [ 
     "wwwroot", 
     "Views", 
     "Areas/**/*.cshtml", 
     "appsettings.json", 
     "web.config" 
    ] 
    }, 

    "scripts": { 
    "prepublish": [ "bower install", "dotnet bundle" ], 
    "postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ] 
    } 
} 

Étape 2). Dans Startup.cs

public void ConfigureServices(IServiceCollection services) 
      { 
       // Add framework services. 
       services.AddMvc(options => { }).AddFluentValidation(fv => fv.RegisterValidatorsFromAssemblyContaining<Startup>()); 
// Other code.. 
      } 

Utilisé dans le contrôleur

[HttpPost] 
     [Route("CreateCurrency")] 
     public IActionResult CreateCurrency([FromBody] CurrencyDTO model) 
     { 
      if (!ModelState.IsValid) //<----Validate here 
      { 
       return new BadRequestObjectResult(ModelState); 
      } 
     //Other Code.. 
     } 

Répondre

3

Le problème était dans une ligne d'inscription startup.cs et merci à @JeremySkinner qui me ont suggéré la bonne voie et je cite sa réponse ici.

Mon erreur

services.AddFluentValidation(fv => fv.RegisterValidatorsFromAssemblyContaining<Startup>()); 

Remplacer avec

RegisterValidatorsFromAssemblyContaining<Startup>() to RegisterValidatorsFromAssemblyContaining<CurrencyDTOValidator>() 

Actual link to the Issue

Lien Description

lien ci-dessus sont les réponses affichées @JeremySkinner