استفاده از Fluent Validation در برنامههای ASP.NET Core - قسمت دوم - اجرای قواعد اعتبارسنجی تعریف شده
نویسنده: وحید نصیری
تاریخ: ۱۳۹۹/۰۳/۳۱ ۹:۳۰
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
using FluentValidationSample.Models;
using Microsoft.AspNetCore.Mvc;
namespace FluentValidationSample.Web.Controllers
{
public class HomeController : Controller
{
public IActionResult Index()
{
return View();
}
[HttpPost]
public IActionResult RegisterValidateManually(RegisterModel model)
{
var validator = new RegisterModelValidator();
var validationResult = validator.Validate(model);
if (!validationResult.IsValid)
{
return BadRequest(validationResult.Errors[0].ErrorMessage);
}
// TODO: Save the model
return Ok();
}
}
} public IActionResult RegisterValidateManually(RegisterModel model)
{
var validator = new RegisterModelValidator();
var validationResult = validator.Validate(model);
if (!validationResult.IsValid)
{
validationResult.AddToModelState(ModelState, null);
return BadRequest(ModelState);
}
// TODO: Save the model
return Ok();
} namespace FluentValidationSample.Web
{
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddTransient<IValidator<RegisterModel>, RegisterModelValidator>();
services.AddControllersWithViews();
} namespace FluentValidationSample.Web.Controllers
{
public class HomeController : Controller
{
private readonly IValidator<RegisterModel> _registerModelValidator;
public HomeController(IValidator<RegisterModel> registerModelValidator)
{
_registerModelValidator = registerModelValidator;
}
[HttpPost]
public IActionResult RegisterValidatorInjection(RegisterModel model)
{
var validationResult = _registerModelValidator.Validate(model);
if (!validationResult.IsValid)
{
return BadRequest(validationResult.Errors[0].ErrorMessage);
}
// TODO: Save the model
return Ok();
}
}
} namespace FluentValidationSample.Web
{
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddTransient<IValidator<RegisterModel>, RegisterModelValidator>();
services.AddControllersWithViews().AddFluentValidation();
} namespace FluentValidationSample.Web.Controllers
{
public class HomeController : Controller
{
[HttpPost]
public IActionResult RegisterValidatorAutomatically(RegisterModel model)
{
if (!ModelState.IsValid)
{
// re-render the view when validation failed.
return View(model);
}
// TODO: Save the model
return Ok();
}
}
} namespace FluentValidationSample.Web.Controllers
{
[Route("[controller]")]
[ApiController]
public class HomeController : Controller
{
[HttpPost]
public IActionResult RegisterValidatorAutomatically(RegisterModel model)
{
// TODO: Save the model
return Ok();
}
}
} {
"type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
"title": "One or more validation errors occurred.",
"status": 400,
"traceId": "|84df05e2-41e0d4841bb61293.",
"errors": {
"FirstName": [
"'First Name' must not be empty."
]
}
} public void ConfigureServices(IServiceCollection services)
{
// ...
// override modelstate
services.Configure<ApiBehaviorOptions>(options =>
{
options.InvalidModelStateResponseFactory = context =>
{
var errors = context.ModelState.Values.SelectMany(x => x.Errors.Select(p => p.ErrorMessage)).ToList();
return new BadRequestObjectResult(new
{
Code = "00009",
Message = "Validation errors",
Errors = errors
});
};
});
} namespace FluentValidationSample.Web
{
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews().AddFluentValidation(
fv => fv.RegisterValidatorsFromAssemblyContaining<RegisterModelValidator>()
);
} public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews().AddFluentValidation(
fv =>
{
fv.RegisterValidatorsFromAssemblyContaining<RegisterModelValidator>();
fv.RunDefaultMvcValidationAfterFluentValidationExecutes = false;
}
);
} RunDefaultMvcValidationAfterFluentValidationExecutes
DisableDataAnnotationsValidation