Domanda

Ho decorato il mio controller di base con un paio di filtri d'azione. Essi funzionano bene.

Uno di questi filtri imposta la richiesta -. Fa cose come impostare la cultura basata sul dominio, etc

Ho anche una manciata di azioni che richiedono l'autorizzazione mediante l'attributo Autorizza.

Il mio problema è che quando un utente tenta di richiedere una pagina che non sono autorizzati ad accedere, i calci di filtro autorizzazione e li reindirizza a una pagina dicendo loro che non possono competere nella pagina.

Il problema è che i filtri d'azione mai corso così la cultura e altri dati richiesta non è mai impostato. Questo fa sì che in modo efficace il linguaggio di sbagliare nella visualizzazione e altri dati mancare.

Lo so che i filtri di autorizzazione eseguiti prima, ma la mia domanda è questa: come posso progettare questo in modo tale che io posso assicurare che certi metodi sono sempre eseguiti prima che la vista viene restituito, indipendentemente l'autorizzazione

.

La speranza che abbia un senso.

È stato utile?

Soluzione

In base a questo documentazione (sotto la testata ordine del filtro), l'autorizzazione filtri eseguito sempre prima di filtri d'azione. Ciò significa che pasticciano con le proprietà Order non aiuterà.

Credo che il modo migliore per gestire questo è quello di scrivere il proprio attributo di autorizzazione (da sottoclassi AuthorizeAttribute e AuthorizeCore prioritario) ed eseguire la vostra azione filtra manualmente quando l'autorizzazione non riesce.

Altri suggerimenti

Vedere Ordine di Esecuzione per filtri d'azione MSDN Articolo su azione di filtro

In sostanza, è possibile fornire una proprietà Order su quei filtri di coltura in modo che sia prima il filtro di autorizzazione, qualcosa di simile a questo:

[CultureRedirect(Order = 1)]
public class MyBaseController : Controller { }

[Authorize(Order = 2)]
public class RequiresAuth : MyBaseController { }

...

Se non funziona, si può ancora eseguire codice bfore un'azione esegue e prima di ogni ActionFilter volontà esegue.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top