2013-07-02 19 views
7

Ho un app MVC4 web con il seguente controllerPerché AllowAnonymous non funziona mentre è stato distribuito nei siti Web di Azure?

[Authorize] 
public class AccountController : BaseController 
{ 
    [AllowAnonymous] 
    public ActionResult SignInRegister(LoginModel loginModel, string returnUrl) 
    { 
    //some implementation 
    } 
    //other secured actions 
} 

Questo funziona come previsto durante l'esecuzione a livello locale, ma non appena mi schiero al sito web gratis Azure ottengo un codice di 401 errore con il messaggio: You do not have permission to view this directory or page.

La rimozione dell'attributo [Authorize] e il ridistribuzione funziona come previsto, aggiungendolo nuovamente e ridistribuendo il problema.

Ho anche provato i nomi di classe completi: System.Web.Mvc.Authorize e System.Web.Mvc.AllowAnonymous con gli stessi risultati.

L'app utilizza .NET 4.5 e il sito Web di Azure è configurato per l'utilizzo 4.5.

UPDATE: Il BaseController ha un'azione che restituisce l'intestazione vista come parziale che non è stata decorata con [AllowAnonymous]. A livello locale, la pagina veniva visualizzata senza l'intestazione, ma sui siti Web di Azure la risposta veniva interrotta e restituita solo con il messaggio di errore menzionato sopra. Non mi ero reso conto che mancasse l'intestazione finché non l'ho guardato di proposito.

Ora viene posta la domanda: perché i siti Web di Azure sostituiscono la risposta?

+2

Dovresti pubblicare l'aggiornamento come risposta. – Kyle

risposta

4

Il BaseController ha un'azione che restituisce l'intestazione come vista parziale che non è stata decorata con [AllowAnonymous]. A livello locale, la pagina veniva visualizzata senza l'intestazione, ma sui siti Web di Azure la risposta veniva interrotta e restituita solo con il messaggio di errore menzionato sopra. Non mi ero reso conto che mancasse l'intestazione finché non l'ho guardato di proposito.

Ora viene posta la domanda: perché i siti Web di Azure sostituiscono la risposta?

+0

Questo mi ha aiutato. Se hai intenzione di includere viste parziali per i layout, ecc, devono essere contrassegnati come [AllowAnonymous]. – Ant

2

Ho avuto lo stesso identico problema e, come l'aggiornamento di Jonas, è necessario prestare attenzione alle azioni che restituiscono visualizzazioni parziali e hanno l'attributo [Autorizza].

Quello che dovete fare è rimuovere l'attributo [Autorizza] e quindi se l'azione richiede che l'utente sia autenticato per il rendering in modo corretto, fate in modo che il vostro codice gestisca il caso non autorizzato.

L'esempio è se la pagina visualizza il nome dell'utente attualmente connesso tramite Parziale. Chiedi all'azione di visualizzare una stringa vuota o qualcos'altro se l'utente attualmente connesso non è disponibile.

1

Controlla il tuo web.config se avete

<authorization> 
    <deny users="?" /> 
</authorization> 

sua esclusione [AllowAnonymous]

Aggiungi alla sezione web.config:

<location path="YourController/AnonymousMethod"> 
    <system.web> 
     <authorization> 
     <allow users="*"/> 
     </authorization> 
    </system.web> 
    </location> 

per consentire l'accesso anonimo per AnonymousMethod

Problemi correlati