17

AuthorizeAttribute'u uygulayan iki sınıf oluşturdum.Eylem filtresi yürütme siparişi

biri küresel kullanılır ve ben Global.asax.cs üzerinde ayarlayın:

filters.Add(new FirstAuthorizeAttribute() { Order = 0 }); 

diğer SecondAuthorizeAttribute adı verilir ve bazı eylem yöntemlerinde sadece kullanılır ve ben de nitelik olarak kullanmak istediğim yöntemler.

[HttpGet] 
    [SecondAuthorize] 
    public ActionResult LogOut() 
    { 
     FormsAuthentication.SignOut(); 
     Session.Clear(); 
     Session.Abandon(); 
     return Redirect(Url.Content("~/")); 
    } 

sorun SecondAuthorizeAttribute daima FirstAuthorizeAttribute önce yürütmek yani, ve ben ilk yürütmek için bu bir ihtiyaç. Sipariş yardımcı olmuyor, nasıl yapabilirim?

cevap

3

al global.asax.cs dosyasında çalışmıyor. İhtiyaç varsa, kontrolör veya Eylem Metodu'na gidin ve verin. örn: -

[secondAttribute (sipariş = 1)] [firstAttribute (derecesi = 2)]

HomeController: Kontrol

veya

halka ActionResult Endeksi()

15

@ HectorCorrea'nın cevabındaki bağlantı şu anda öldü, işte alınan ve şu anki Google önbelleğinden özetlenen içerik (aynı zamanda geçerli olması durumunda):

Filtreler bu sırada çalıştırın:

  • Yetkilendirme
  • Eylem filtreleri
  • Tepki/Sonuç filtreleri
  • İstisna filtreleri
  • her filtresinde

filtreler, Sipariş özelliğini belirtebilir . (Tüm filtreler FilterAttribute sınıfından türetilmiştir ve bu sınıfın bir Sipariş özelliği vardır). Bu özellik, filtrenin belirli bir Siparişte çalışmasını sağlayacaktır.

örn:

[AuthorizationFilterA(Order=2)] 
[AuthorizationFilterB(Order=1)] 
public ActionResult Index() 
{   
    return View(); 
} 

varsayılan olarak, var FilterScope da var ve en düşük kapsamı ile filtre sırası aynı olduğunda ilk olarak çalışır (veya belirtilmemiş):

namespace System.Web.Mvc { 
    public enum FilterScope { 
     First = 0, 
     Global = 10, 
     Controller = 20, 
     Action = 30, 
     Last = 100, 
    } 
} 

ise hayır sipariş belirtilir, sipariş değeri -1'dir (ilk, son değil).kendileri filtreleri olabilir ve sipariş ile Int32.MinValue

+2

İstisna filtrelerinin ters sırada çalıştığını aklınızda bulundurun (tabii ki onlar yapar!), Bu nedenle, en yüksek kapsamı olan filtre önce çalışır – levelnis