2013-03-14 12 views
6
[Authorize] 
public class MyController : BaseController 
{ 
    [PermissionAuthorize] 
    public ActionResult GridData() 
    { 
     return Json(data, JsonRequestBehavior.AllowGet); 
    } 
} 

Ho creato l'attributo PermissionAuthoize per il controllo dell'autorizzazione dell'utente su un'azione particolare. Ho un problema Dopo che la sessione utente o il ticket scadono in quel momento se l'utente invia ajax requrest al controller, quindi autorizza l'attributo rifiuta la richiesta e restituisce come forma di login html all'utente.questa app non è in esecuzione. mostra l'impatto negativo sull'utente.Come reindirizzare l'autorizzazione di Ajax su controller alla pagina di accesso? .

quindi, desidero reindirizzare l'utente alla pagina di accesso se inviano una richiesta Ajax sul biglietto scaduto.

Posso creare un altro attributo di autorizzazione per controller?

+0

Darin già dato la risposta qui: http://stackoverflow.com/questions/5238854/handling-session-timeout-in-ajax-calls –

risposta

3

seguito il codice potrebbe aiutare:

$.ajax({ 
    url: 'url',  
    statusCode: { 
     404: function() { 
      //page not found 
     }, 
     200: function() { 
      //ok, do your stuff 
     }, 
     302: function() { 
      //redirect - check if url contains login and do redirect    
     } 
    } 
}) 

Fondamentalmente si può solo controllare per i reindirizzamenti e fare cose normali in success/error callback, ma quando si arriva reindirizzare intestazione http si cambia window.location.href alla pagina di login desiderato

5

La prima cosa che devi fare è configurare il modulo di autenticazione moduli per interrompere il reindirizzamento alla pagina di accesso quando viene lanciato 401. Phil Haack ha scritto uno nice article su come questo potrebbe essere raggiunto.

Una volta fatto, sarete in grado di acquisire 401 codici di stato HTTP sul client. Così si potrebbe scrivere un global ajax handler che reindirizza alla pagina di accesso quando 401 codice di stato viene inviato dal server (che accadrà quando il ticket di autenticazione moduli scade o l'utente non è autenticato affatto):

$(document).ajaxError(function(event, jqxhr, settings, exception) { 
    if (jqxhr.status == 401) { 
     // unauthorized 
     window.location.href = '/logon'; 
    } 
}); 
+1

Il suo modo gud per rilevare l'errore ajax ma nel mio senerio sto usando la fonte di dati di kendo ui in alcuni casi come eliminare dati e dati della griglia. in questo modo non riesco a gestire l'errore ajax. – pargan

Problemi correlati