Asp.net MVC: Seznam všech akcí na řadiči s konkrétním atributem

hlasů
9

Snažím se vyjmenovat všechny regulátory a jejich akce se specifickými vlastnostmi vytvořit dynamický Google Sitemap. Takže mohu „označit“ určité akce s atributem takže se objeví v souboru Sitemap.

Tady jsem zjistil, jak se dostat všechny řadiče. Ale nejsem si jistý, jak se dostat všechny své akce s konkrétním atributem. Zkoušel jsem GetMethods a pak použít GetCustomAttributes, ale nejsem si jistý, jestli to je ten správný způsob, jak to udělat. Připadalo mi něco málo přes komplikované.

Jakmile získám regulátory a jejich akce jsem chtěl použít techniku vysvětleno zde získat URL. Jak jste si všimnout, Eric Duncan mluví o tom, co jsem se snaží dosáhnout v této otázce.

Díky předem.

Položena 31/08/2009 v 17:12
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
18

I použít nějaký kód do svých unit testů k ověření, že některé akce jsou zdobeny atributy. Využívá reflexi s nějakým vyčíslitelnému metodou rozšíření dobroty. Myslím, že byste mohli upravit to. Všimněte si, pokud jste jen o to, zda existuje nebo ne, můžete použít Count () na počítání spíše než získání skutečné atribut. Tímto způsobem vám umožňuje určitou flexibilitu v používání vlastnosti atributů přizpůsobit chování. Použití stromu dědičnosti by vám umožní ozdobit celý regulátor.

 var methods= controller.GetType()
                        .GetMethods( BindingFlags.Public | BindingFlags.Instance )
 foreach (var info in methods)
 {
     if (info.ReturnType  == typeof(ActionResult))
     {
        var attribute = info.GetCustomAttributes( typeof( SiteMapAttribute ), true )
                            .Cast<SiteMapAttribute>()
                            .FirstOrDefault();

        if (attribute != null && !attribute.Exclude.Contains( info.Name ))
        {
            ...
        }
    }
}
Odpovězeno 31/08/2009 v 17:26
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more