Gli argomenti devono sempre essere passati a un'azione in un controller MVC?

1

Ho un certo numero di controller che accettano un "sito" come parametro all'interno delle loro azioni, in questo modo:

[AuthoriseSite]
public ActionResult Index(string site) {
    var model = gvmFactory.CreateAnIndexViewModel(site);
    return View("Index", model);
}

Ho passato il sito come parametro, ma potrei anche calcolarlo dal profilo di appartenenza di un utente, quindi il mio codice potrebbe essere simile a:

[AuthoriseSite]
public ActionResult Index() {
    string site = UserProfileService.GetUsersSite();   
    var model = gvmFactory.CreateAnIndexViewModel(sitename);
    return View("Index", model);
}

Il parametro del sito può variare in base al ruolo dell'utente. Gli utenti che sono amministratori possono scegliere molti siti diversi, mentre i non amministratori possono utilizzare solo quello a cui appartengono.

La mia domanda è, qual è la prassi migliore?

Preferisco il primo, mi sembra più simile a MVC, anche se questo potrebbe essere solo che ho sempre avuto la tendenza a farlo. Il secondo ha alcuni vantaggi nel fatto che gli URL non possono essere modificati in modo che i non amministratori possano vedere i siti che non dovrebbero. Tuttavia, il filtro [AuthoriseSite] impedisce questo.

    
posta Daniel Hollinrake 14.07.2014 - 14:04
fonte

1 risposta

1

Se è comune a molti controller e lo usi in molti posti, sembra che tu abbia bisogno di un BaseController da cui i controller possano ereditarti, e poi metterci quella logica.

Se lo fai, non è necessario passare argomenti inutili alle tue azioni e le tue azioni non hanno bisogno della stessa copia di codice incollata ovunque.

    
risposta data 14.07.2014 - 14:16
fonte

Leggi altre domande sui tag