Asp MVC [Autorizza] per restituire un messaggio anziché un Get
-
05-07-2019 - |
Domanda
Vorrei usare i tag [Autorizza (Ruoli = " Admin ")] sui metodi del mio controller.
Se un utente non è un amministratore, vorrei riportarlo alla schermata di accesso. Il comportamento predefinito di restituire l'utente alla mia pagina di accesso è reindirizzare il mio utente su " Account / Login " utilizzando un URL Get.
Il problema è che le sottopagine del mio sito Web sono tutte viste parziali aggiornate dalle chiamate Ajax, inclusa la mia schermata di accesso.
Quindi la mia domanda è: È possibile modificare la classe seguente per restituire un reindirizzamento post anziché un reindirizzamento?
public class AjaxAuthorizeAttribute : AuthorizeAttribute
{
override public void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
// Only do something if we are about to give a HttpUnauthorizedResult and we are in AJAX mode.
if (filterContext.Result is HttpUnauthorizedResult && filterContext.HttpContext.Request.IsAjaxRequest())
{
filterContext.Result = new RedirectResult("../Account/Login");
}
}
}
Soluzione
Apparentemente il problema sembra risolto rimuovendo
[Acceptverbs(HttpVerbs.Post)]
attributo sul metodo di accesso del mio controller di account.
In questo modo non è nemmeno necessario sovrascrivere AuthorizeAttribute
:)
Altri suggerimenti
Ho trovato una soluzione in Microsoft.WebPages.PreApplicationStartCode.SetupFormsAuthentication()
Basta aggiungere un appSetting chiamato " loginUrl " per specificare l'azione di accesso:
<add key="loginUrl" value="~/Account/LogOn"/>