¿Es posible omitir la ejecución de todo el método de acción y devolver un ActionResult
específico cuando se cumple una condición determinada en OnActionExecuting
?Cómo omitir la ejecución de acción desde un ActionFilter?
Respuesta
Puede usar filterContext.Result para esto. Se debe tener este aspecto:
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
//Check your condition here
if (true)
{
//Create your result
filterContext.Result = new EmptyResult();
}
else
base.OnActionExecuting(filterContext);
}
Ver mi muestra la descarga y el artículo de MSDN Filtering in ASP.NET MVC.
Puede cancelar la ejecución del filtro en los métodos OnActionExecuting
y OnResultExecuting
estableciendo la propiedad Result
en un valor no nulo.
No se invocarán los filtros OnActionExecuted
y OnActionExecuting
pendientes y el invocador no llamará al método OnActionExecuted
para el filtro cancelado o para los filtros pendientes.
Se ejecutará el filtro OnActionExecuted
para los filtros que se hayan ejecutado anteriormente. Se ejecutarán todos los filtros OnResultExecutingand
OnResultExecuted
.
El siguiente código de la muestra muestra cómo devolver un ActionResult
específica cuando una determinada condición se cumple en OnActionExecuting
:
if (filterContext.RouteData.Values.ContainsValue("Cancel"))
{
filterContext.Result = new RedirectResult("~/Home/Index");
Trace.WriteLine(" Redirecting from Simple filter to /Home/Index");
}
Debe tenerse en cuenta que si tiene más de un filtro y el orden de los filtros debe especificar el parámetro "Pedir" al registrar su filtro para que pueda controlar el orden de ejecución como Rick ha descrito en sus detalles sobre cómo el resultado La propiedad filterContext.Result se comporta. –
Buen punto Nick, pero vea mi sección Orden de filtro: la propiedad de pedido solo se aplica a los filtros de la misma clase. Auth siempre se ejecuta primero, excepción, último. – RickAndMSFT
Usted puede utilizar el siguiente código aquí.
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
...
if (needToRedirect) //your condition here
{
...
filterContext.Result = new RedirectToAction(string action, string controller)
return;
}
...
}
RedirectToAction le redirigirá la acción específica en función de la condición.
RedirectToAction es un método (al menos en MVC5) por lo que no puedes new(). – rumblefx0
- 1. ¿Cómo accedo a ModelState desde un ActionFilter?
- 2. Puede aplicar un ActionFilter en ASP.NET-MVC en CADA acción
- 3. ¿Cómo pruebo UnitTest un ActionFilter personalizado?
- 4. Omitir la ejecución de -with-block
- 5. ¿Cómo pruebo un ActionFilter en ASP.NET MVC?
- 6. Cómo omitir un elemento de formulario desde la navegación TAB?
- 7. Modificar un modelo en un ActionFilter
- 8. ¿Cómo puedo omitir temporalmente la ejecución de la tarea de compilación en un comando sbt personalizado?
- 9. RedirectToAction de ActionFilter
- 10. Omitir un caso de prueba RSpec en tiempo de ejecución
- 11. Enlace de parámetros de ASP.NET MVC ActionFilter
- 12. ¿Cómo puedo probar un filtro ActionFilter personalizado en ASP.Net MVC
- 13. Cómo omitir la macro Autoexec al abrir MSAccess desde MSAccess?
- 14. Cómo omitir la ejecución de un método principal para ejecutar el método abuelo?
- 15. Cómo puedo crear un MethodInfo desde un delegado de Acción
- 16. ASP.NET Web API ActionFilter ejemplo
- 17. RSpec in Rails: cómo omitir un before_filter?
- 18. Cómo omitir un registro en un Foreach
- 19. Orden de ejecución del filtro de acción
- 20. Ejecución de código antes de cualquier acción
- 21. Cómo crear una acción desde la selección de una fila desde un NSTableView
- 22. ¿Cómo obtener el controlador y la acción actuales desde dentro de la acción del niño?
- 23. Vista de devolución de ActionFilter
- 24. ¿Cómo puedo crear un delegado de acción desde MethodInfo?
- 25. Omitir before_filter en Rails
- 26. ¿Cómo redirecciono al usuario a otra acción del controlador desde un filtro de acción ASP.MVC 3?
- 27. Acción JSF desde onChange
- 28. Elección de un subproceso para la ejecución de acción de barrera - Java CyclicBarrier
- 29. ASP.NET MVC ActionFilter - Determine si AJAX Request
- 30. La ejecución de JavaScript desde un pepino/Carpincho prueba
¿Por qué omite base.OnActionExecuting cuando su condición es verdadera? En mi caso, necesito que se ejecute antes de poder establecer el resultado. – xr280xr