policies net mvc example attribute asp apicontroller asp.net-mvc action-filter modelstate

asp.net-mvc - net - authorize attribute mvc 5 example



¿Cómo accedo a ModelState desde un ActionFilter? (1)

Eso sería por: filterContext.Controller.ViewData.ModelState

Estoy construyendo un ActionFilter para reutilizar un código para un simple bloque de spam, básicamente lo que hago es que tengo un método Html Helper que representa un cuadro de entrada y una entrada oculta, y en ActionFilter verifico si los dos valores son el igual o no Si no, quiero aprovechar el resto de mi lógica de validación y agregar un ModelStateError al ModelState , pero ¿cómo hago eso? ¿Cómo agrego un ModelStateError desde el ActionFilter ?

ACTUALIZACIÓN: Aquí está el código con el que estoy tratando. Cuando ModelState.IsValid una acción de controlador que tiene este atributo, ModelState.IsValid aún devuelve true aunque no pase ninguno de los valores de formulario requeridos:

public override void OnActionExecuting(ActionExecutingContext filterContext) { var r = filterContext.HttpContext.Request; if (r.Form["sixtimesnine"] != r.Form["fourtytwo"] || string.IsNullOrEmpty(r.Form["sixtimesnine"]) || string.IsNullOrEmpty(r.Form["fourtytwo"])) { filterContext.Controller.ViewData.ModelState.AddModelError("Spam", this.ErrorMessage); } base.OnActionExecuting(filterContext); }

Este es el ActionMethod :

[ValidateAntiSpam(ErrorMessage = "Spambotar får inte.")] public ActionResult Write(GuestbookPost postToCreate) { if (ModelState.IsValid) { _posts.Add(postToCreate); return RedirectToAction("Index"); } return View(); }

Me acabo de dar cuenta de que si establezco un punto de interrupción dentro del método OnActionExecuting y OnActionExecuting "Pruebas de depuración", nunca se golpea el punto de interrupción. ¿Por qué?