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");
    }
  }
}
È stato utile?

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"/>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top