Czy można pominąć wykonanie całej metody akcji i zwrócić określoną wartość ActionResult
, gdy pewien warunek zostanie spełniony w OnActionExecuting
?Jak pominąć wykonanie akcji z ActionFilter?
Odpowiedz
Możesz użyć filterContext.Result do tego. Powinno to wyglądać tak:
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
//Check your condition here
if (true)
{
//Create your result
filterContext.Result = new EmptyResult();
}
else
base.OnActionExecuting(filterContext);
}
Zobacz moją próbkę pobierania oraz MSDN artykuł Filtering in ASP.NET MVC.
Można anulować wykonanie filtra metodami OnActionExecuting
i OnResultExecuting
, ustawiając właściwość Result
na wartość inną niż null.
Wszelkie oczekujące OnActionExecuted
i OnActionExecuting
filtry nie zostanie wywołany i wywołującego nie będzie wywołać metodę OnActionExecuted
za odwołany filtr lub filtry dla oczekujących.
Zostanie uruchomiony filtr dla wcześniej uruchomionych filtrów. Zostaną uruchomione wszystkie filtry OnResultExecutingand
OnResultExecuted
.
Poniższy kod z próbki pokazuje, jak powrócić konkretny ActionResult
gdy pewien warunek jest spełniony w OnActionExecuting
:
if (filterContext.RouteData.Values.ContainsValue("Cancel"))
{
filterContext.Result = new RedirectResult("~/Home/Index");
Trace.WriteLine(" Redirecting from Simple filter to /Home/Index");
}
Należy zauważyć, że jeśli masz więcej niż jeden filtr i kolejność filtrów ma znaczenie, powinieneś podać parametr "Zamówienie" podczas rejestracji filtra, aby móc kontrolować kolejność wykonania, tak jak Rick opisał w swoich szczegółach dotyczących wyników Właściwość filterContext.Result zachowuje się. –
Dobry punkt Nick - ale zobacz moją sekcję Porządek filtru - właściwość zamówienia dotyczy tylko filtrów w tej samej klasie. Auth zawsze uruchamia się jako pierwszy, wyjątek, ostatni. – RickAndMSFT
Można użyć następującego kodu tutaj.
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
...
if (needToRedirect) //your condition here
{
...
filterContext.Result = new RedirectToAction(string action, string controller)
return;
}
...
}
RedirectToAction przekieruje użytkownika do określonej akcji na podstawie warunku.
RedirectToAction jest metodą (przynajmniej w MVC5), więc nie możesz jej(). – rumblefx0
- 1. Asp.net Web API - zwróć dane z actionfilter
- 2. Jak pominąć wykonanie metody nadrzędnej, aby wykonać metodę nadrzędną?
- 3. Jak sprawić, aby MainThread czekał na wykonanie akcji asynchronicznej?
- 4. Jak uzyskać dostęp do ModelState z ActionFilter?
- 5. RedirectToAction od ActionFilter
- 6. Makabryczne HttpActionContext.ActionArguments podczas testowania Web.Api ActionFilter
- 7. MVC ActionFilter podobne atrybuty dla WCF
- 8. Jak mogę przetestować niestandardowy ActionFilter w ASP.Net MVC
- 9. aspnet vNext ActionFilter i TempData
- 10. Kiedy używać HttpMessageHandler vs ActionFilter?
- 11. Wykonanie z parametrami
- 12. Jak pominąć pierwsze dziecko?
- 13. Jak pominąć oddzwonienia ActiveRecord?
- 14. podkreślenie, jak używać pominąć
- 15. Jak pominąć default_scope?
- 16. Jak pominąć linie nagłówka pre z csv.DictReader?
- 17. C# - Jak pominąć parametry z wartościami domyślnymi?
- 18. Jak pominąć niektóre testy z Test :: Unit
- 19. Przekieruj do akcji z innej akcji
- 20. jak pominąć Domyślne Argumenty C++?
- 21. Jak pominąć walidacje w/find_or_create_by_?
- 22. Jak pominąć sprawdzanie poprawności has_secure_news
- 23. Nos: Jak pominąć testy domyślnie?
- 24. twitter bootstrap - jak pominąć linię?
- 25. Jak pominąć bajty w strumieniu
- 26. Jak pominąć iterację pętli foreach?
- 27. Jak pominąć test jednostki BOOST?
- 28. pandas.read_csv: jak pominąć linie komentarza
- 29. Jak pominąć pierwszą iterację $ .each()?
- 30. Wyjątek wskaźnika Null w korzystaniu z dostawcy akcji akcji akcji akcji
Dlaczego pomijasz base.OnActionExecuting, kiedy twój warunek jest prawdziwy? W moim przypadku muszę to uruchomić, zanim będę mógł ustawić Wynik. – xr280xr