Estrarre il codice di esempio da http://lukesampson.com/post/471548689/entering-and-exiting-https-with-asp-net-mvc scritto per ASP.NET MVC2, ho notato che è possibile verificare se un attributo personalizzato viene applicato all'azione o al controller corrente da Accedendo filterContext.ActionDescriptor
e filterContext.ActionDescriptor.ControllerDescriptor
rispettivamente:Ottieni un elenco di attributi personalizzati per l'azione/controller corrente in ASP.NET MVC
public class ExitHttpsIfNotRequiredAttribute : FilterAttribute, IAuthorizationFilter {
public void OnAuthorization(AuthorizationContext filterContext) {
// snip
// abort if a [RequireHttps] attribute is applied to controller or action
if(filterContext.ActionDescriptor.ControllerDescriptor.GetCustomAttributes(typeof(RequireHttpsAttribute), true).Length > 0) return;
if(filterContext.ActionDescriptor.GetCustomAttributes(typeof(RequireHttpsAttribute), true).Length > 0) return;
// snip
}
}
Quale sarebbe il metodo di ASP.NET MVC 1 di controllare l'azione e controller per un attributo personalizzato? In ASP.NET MVC 1 non è disponibile lo filterContext.ActionDescriptor
.
ho bisogno di sapere - che cosa questi rendimenti fanno? Perché stai solo tornando? – muttley91
Puoi vedere nel codice originale nella domanda che questo frammento si trova all'interno del metodo "public void OnAuthorization" di un attributo. Se RequireHttpsAttribute si trova sul controller o sull'azione corrente, la cosa migliore da fare è il "ritorno" fuori dal metodo e continuare come se nulla fosse successo. Ma se RequireHttps NON è sul controller o azione allora eseguirà del codice, in questo caso probabilmente reindirizzando il browser su un protocollo non HTTPS. – DavGarcia
Si noti che questo snippet era per ASP.NET MVC 1 e forse MVC 2. Poiché MVC 3, ci sono stati modi migliori per affrontare il problema del controllo dell'esistenza di controller e filtri di azione, come indicato da Sunday Ironfoot. – DavGarcia