如何从OnActionExecuting((ActionExecutingContext filterContext)NET CORE MVC

时间:2018-11-30 13:36:37

标签: asp.net-core action-filter

我有一个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无效,我的问题是如何使用适当的模型返回当前视图。

我的观点是用于创建产品的表单

0 个答案:

没有答案