Soru Bir ActionFilter'dan eylem yürütme nasıl atlanır?


Tüm eylem yöntemi yürütmesini atlamak ve belirli bir geri dönmek mümkün mü ActionResult belli bir koşul yerine getirildiğinde OnActionExecuting?


32
2018-03-23 09:59


Menşei




Cevaplar:


Bunun için filterContext.Result kullanabilirsiniz. Böyle görünmeli:

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
    //Check your condition here
    if (true)
    {
        //Create your result
        filterContext.Result = new EmptyResult();
    }
    else
        base.OnActionExecuting(filterContext);
}

19
2018-03-23 11:21



Durumunuz doğru olduğunda base.OnActionExecuting neden atlıyorsunuz? Benim durumumda, Sonucu ayarlayabilmeden önce koşmam gerekiyor. - xr280xr


İndirme örnekimi ve MSDN makalemize bakın ASP.NET MVC'de filtreleme.

Filtre yürütmeyi iptal edebilirsiniz. OnActionExecuting ve OnResultExecuting ayarlayarak yöntemler Result boş olmayan bir değere özellik.

Bekleyen OnActionExecuted ve OnActionExecuting filtreler çalıştırılmayacak ve invoker OnActionExecuted iptal edilen filtre veya bekleyen filtreler için yöntem.

OnActionExecuted Daha önce çalıştırılan filtreler için filtre çalışacaktır. Tümü OnResultExecutingand  OnResultExecuted filtreler çalışacaktır.

Örnekteki aşağıdaki kod, belirli bir özelliğin nasıl döndürüleceğini gösterir. ActionResult belli bir koşul yerine getirildiğinde OnActionExecuting:

if (filterContext.RouteData.Values.ContainsValue("Cancel")) 
{
    filterContext.Result = new RedirectResult("~/Home/Index");
    Trace.WriteLine(" Redirecting from Simple filter to /Home/Index");
}

33
2018-03-23 16:29



Birden fazla filtreniz varsa ve filtrelerin sırası önemliyse, filtrenizi kaydederken "Sipariş" parametresini belirtmeniz gerekir. Böylece, Rick filtresinin, Sonuç filtresinin nasıl olduğuyla ilgili ayrıntılarında ana hatlarıyla belirtildiği gibi, yürütme sırasını kontrol edebilirsiniz. .Result özelliği davranır. - Nick Bork
İyi bir nokta Nick - ama benim Filtre Süzgeci bölümüne bakıyorum - sipariş özelliği sadece aynı sınıftaki filtreler için geçerlidir. Her zaman ilk, istisna, son çalışır. - RickAndMSFT


Aşağıdaki kodu burada kullanabilirsiniz.

public override void OnActionExecuting(ActionExecutingContext filterContext)
 {
    ...
    if (needToRedirect) //your condition here
    {
       ...
       filterContext.Result = new RedirectToAction(string action, string controller)
       return;
    }
    ...
 }

RedirectToAction, duruma göre belirli eylemi yönlendirecektir.


2
2018-05-13 06:41



RedirectToAction bir yöntemdir (en azından MVC5'de), böylece yeni () olamazsınız. - rumblefx0
Orijinal (ve doğru) cevaplardan çok sonra değersiz bir cevap eklendi ve yanlış filterContext.Result alt sınıf olmalı ActionResult. Bu kadar önce nasıl oy verildiği bir sırdır. - Steve Pettifer