È possibile saltare l'intera esecuzione del metodo di azione e restituire uno specifico ActionResult
quando viene soddisfatta una determinata condizione in OnActionExecuting
?Come saltare l'esecuzione di un'azione da un ActionFilter?
risposta
È possibile utilizzare filterContext.Result per questo. Esso dovrebbe essere simile a questo:
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
//Check your condition here
if (true)
{
//Create your result
filterContext.Result = new EmptyResult();
}
else
base.OnActionExecuting(filterContext);
}
Vedi il mio campione di download e articolo di MSDN Filtering in ASP.NET MVC.
È possibile annullare l'esecuzione del filtro nei metodi OnActionExecuting
e OnResultExecuting
impostando la proprietà Result
su un valore non null.
Tutti i filtri in sospeso OnActionExecuted
e OnActionExecuting
non vengono richiamati e l'invoker non chiama il metodo OnActionExecuted
per il filtro annullato o per i filtri in sospeso.
Il filtro OnActionExecuted
per i filtri eseguiti in precedenza verrà eseguito. Verranno eseguiti tutti i filtri OnResultExecutingand
OnResultExecuted
.
Il seguente codice dal campione mostra come restituire una specifica ActionResult
quando una certa condizione è soddisfatta in OnActionExecuting
:
if (filterContext.RouteData.Values.ContainsValue("Cancel"))
{
filterContext.Result = new RedirectResult("~/Home/Index");
Trace.WriteLine(" Redirecting from Simple filter to /Home/Index");
}
Si noti che se si dispone di più di un filtro e l'ordine dei filtri è importante, è necessario specificare il parametro "Ordine" quando si registra il filtro in modo da poter controllare l'ordine di esecuzione come descritto da Rick nei dettagli su come il risultato La proprietà filterContext.Result si comporta. –
Buon punto Nick - ma vedi la mia sezione Ordine filtri - la proprietà dell'ordine si applica solo ai filtri della stessa classe. L'autenticazione esegue sempre prima, l'eccezione, l'ultima. – RickAndMSFT
È possibile utilizzare il seguente codice qui.
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
...
if (needToRedirect) //your condition here
{
...
filterContext.Result = new RedirectToAction(string action, string controller)
return;
}
...
}
RedirectToAction ti reindirizzerà l'azione specifica in base alla condizione.
RedirectToAction è un metodo (almeno in MVC5), quindi non è possibile(). – rumblefx0
- 1. Come accedere a ModelState da ActionFilter?
- 2. Come si UnitTest un ActionFilter personalizzato?
- 3. Modificare un modello in ActionFilter
- 4. RedirectToAction From ActionFilter
- 5. Return View from ActionFilter
- 6. GoogleTest: come saltare un test?
- 7. Come saltare un'iterazione di un ciclo `foreach`?
- 8. API Web ASP.NET ActionFilter esempio
- 9. Come testare un ActionFilter personalizzato in ASP.Net MVC
- 10. Come posso testare un ActionFilter in ASP.NET MVC?
- 11. ASP.NET MVC ActionFilter parameter binding
- 12. Interruzione della continuazione di ASP.NET MVC ActionFilter
- 13. RSpec in Rails: Come saltare un before_filter?
- 14. Quando utilizzare HttpMessageHandler vs ActionFilter?
- 15. Come saltare un test dell'unità BOOST?
- 16. con Unity per iniettare le dipendenze in un personalizzato ActionFilter
- 17. come saltare gli argomenti di default C++?
- 18. ASP.NET MVC ActionFilter - Determina se richiesta AJAX
- 19. Saltare un test in Qunit
- 20. Come saltare un filtro nella catena di filtri in java
- 21. Come evitare di saltare su un ancoraggio fare clic?
- 22. Web ActionFilter API modificare tornato valore
- 23. Come saltare la prima iterazione di $ .each()?
- 24. Come saltare le convalide has_secure_password
- 25. MVC 3/4 HttpModule o ActionFilter
- 26. Come saltare i callback di ActiveRecord?
- 27. Naso: Come saltare i test di default?
- 28. Come posso saltare l'elemento di array .map?
- 29. Come saltare un pytest usando un dispositivo esterno?
- 30. Come posso saltare un blocco/frammento "dovrebbe" in specs2?
Perché si salta la base.OnActionExecuting quando la condizione è vera? Nel mio caso ho bisogno di farlo funzionare prima di poter impostare il risultato. – xr280xr