WebApi proje denetleyicimde yalnızca bir HttpGet yöntemi olan FluentValidation'ı başarıyla uygularım. Başka bir HttpGet yöntemi eklediğimde, her iki yönteme de rota özniteliği ekledim. yani [Rota ("Metot 1")] ve [Güzergah ("Metod2")].WebApi Kullanırken FluentValidation Çalışmıyor [Route] Öznitelik
Artık herhangi bir veri girip girmediğime bakmadan, ModelState doğru olarak geri dönüyor.
İşte kodum.
WebApiConfig
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Filters.Add(new ValidateModelStateFilter());
//FluentValidation
FluentValidationModelValidatorProvider.Configure(config);
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "{action}/{id}",
defaults: new { controller = "Menu", id = RouteParameter.Optional}
);
}
}
ValidateModelStateFilter
public class ValidateModelStateFilter : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
if (!actionContext.ModelState.IsValid)
{
actionContext.Response = actionContext.Request.CreateErrorResponse(HttpStatusCode.BadRequest, actionContext.ModelState);
}
}
}
Kontrolör
[HttpGet]
[Route("Method1")]
public IHttpActionResult ReadAllMenusByApplication([FromUri] ReadAllMenusByApplicationInput input)
{
var result = new List<ApplicationMenu>();
...
}
Sen başvurulan makalesinde yapılan şeylerin çoğu var gibi
Custom Validation in ASP.NET Web API with FluentValidation
referans
için bu makaleyi kullanarak giriş Nesneusing FluentValidation;
using FluentValidation.Attributes;
namespace MenuService.Models
{
[Validator(typeof(ReadAllMenusByApplicationInputValidator))]
public class ReadAllMenusByApplicationInput
{
public ReadAllMenusByApplicationInput() {
this.ApplicationName = string.Empty;
}
/// <summary>
/// The MenuSystem name of the application
/// </summary>
public string ApplicationName { get; set; }
}
public class ReadAllMenusByApplicationInputValidator : AbstractValidator<ReadAllMenusByApplicationInput>
{
public ReadAllMenusByApplicationInputValidator()
{
RuleFor(x => x.ApplicationName).NotEmpty();
}
}
}
Denetleyiciyi hem iki yolla hem de gönderilen istek örneğini gösterin. – Nkosi