我有一个Net核心MVC应用程序,并且正在使用流畅的验证在CreateAction中验证模型。我有一个ValidatorActionFilter类,它可以验证控制器的所有操作。
这是我的课程
public class ValidatorActionFilter : IActionFilter
{
public void OnActionExecuting(ActionExecutingContext filterContext)
{
if (!filterContext.ModelState.IsValid)
{
if (filterContext.HttpContext.Request.Method == "GET")
{
var result = new BadRequestResult();
filterContext.Result = result;
}
else
{
var controller = filterContext.Controller as Controller;
object model = controller.ViewData.Model;
string action = filterContext.ActionDescriptor.RouteValues["action"];
string controllerName = filterContext.ActionDescriptor.RouteValues["controller"];
filterContext.Result = controller.View(action, controllerName);
}
}
}
public void OnActionExecuted(ActionExecutedContext filterContext)
{
}
}
在启动中,我对此进行配置
services.AddMvc(opt =>
{
//opt.Filters.Add(typeof(DbContextTransactionFilter));
opt.Filters.Add(typeof(ValidatorActionFilter));
})
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
.AddFeatureFolders()
.AddFluentValidation(cfg => { cfg.RegisterValidatorsFromAssemblyContaining<Startup>(); });
}
然后我有包含此方法的ProductsController
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create(Create.Command command)
{
string stop = "1";
var resultado = await _mediator.Send(command);
if (!resultado.Exito)
{
ModelState.AddModelError(string.Empty, "Hubo un error al guardar el producto");
_logger.LogCritical("Error al guardar el Producto");
return View(command);
}
return RedirectToAction("AgregadoExitoso");
}
我正在使用CQRS模式,在这种情况下,Create.Command是我的DTO,其中包含我想保留在数据库中的信息
验证工作正常,我进入OnActionExecuting,并检查modelstate无效,我的问题是如何使用适当的模型返回当前视图。
我的观点是用于创建产品的表单