2010-03-29 17 views
5

Sto usando una pagina di errore personalizzata in IIS 6:ASP.NET: disabilitazione dell'autenticazione per una singola pagina di aspx (pagina di errore personalizzata)?

<customErrors redirectMode="ResponseRedirect" mode="On" defaultRedirect="Error2.aspx"/> 

Voglio disabilitare l'autenticazione per la pagina di errore personalizzata perché l'errore viene sollevata è legato a un modulo di autenticazione e non voglio entrare in un ciclo infinito e voglio mostrare una pagina di errore pulita all'utente. Ho provato la seguente configurazione per farlo.

<location path="Error2.aspx"> 
<system.web> 
    <authentication mode="None"/> 
    <authorization> 
    <allow users="?"/> 
    <allow users="*"/> 
    </authorization> 
</system.web> 
</location> 

mi stanno uno System.Configuration.ConfigurationErrorsException per la riga che imposta la modalità di autenticazione.

È un errore utilizzare una sezione registrata come allowDefinition = 'MachineToApplication' oltre il livello di applicazione. Questo errore può essere causato da una directory virtuale non configurata come un'applicazione in IIS.

Ho verificato che non ci sono altri file web.config nelle sottodirectory nella cartella dell'applicazione. La cartella delle applicazioni è configurata come un'applicazione in IIS e la pagina degli errori si trova nella root dell'applicazione. Le autorizzazioni file impostate per la pagina di errore in IIS includono l'autenticazione anonima e Windows (ho provato anche solo l'anonimato).

risposta

1

Ho modificato la modalità di reindirizzamento degli errori personalizzati per rewriteResponse. In questo modo, non viene emessa una richiesta separata per la pagina di errore, il modulo di autenticazione che genera l'errore non viene rieseguito, ecc.

Posso immaginare che ciò non sia sufficiente in alcuni scenari (framework MVC forse ?) ma per il mio caso d'uso, era sufficiente.

Per ora, ho intenzione di rispondere alla mia stessa domanda con questa soluzione alternativa che ho escogitato a meno che qualcun altro possa dimostrare un modo per disabilitare effettivamente l'autenticazione come originariamente dichiarato.

0

Aprire le impostazioni IIS e assicurarsi che IIS (machine.config) di base consenta le scritture sulla proprietà offensiva (system.web.authentication o system.web.authorization, a seconda del numero di riga a cui si fa riferimento nell'errore).

Successivamente, pulire la soluzione e ricostruire. Ho avuto questo problema e non aveva nulla a che fare con le impostazioni di machine.config o web.config. Per qualche ragione, fare una pulizia e ricostruire ha fatto sì che l'errore sparisse.

+0

Scusa, non ho fortuna. AllowDefinition in machine.config è impostato su MachineToApplication, il valore predefinito. Ciò significa che l'impostazione del valore in web.config nella root dell'applicazione dovrebbe essere corretta, che è dove sto impostando il valore. –

1

Controllare il seguente link. Ha informazioni che potrebbero aiutare per quanto riguarda il tag location.

<location path="404.aspx"> 
    <system.web> 
     <authorization> 
      <allow users="*" /> 
     </authorization> 
    </system.web> 
</location> 

L'approccio più semplice sarebbe quella di spostare tutti i file di errore e le pagine che si desidera essere sempre accessibili alla propria directory e quindi aggiungere un file web.config alla directory che concede l'accesso non autenticato.

+0

Non è proprio così semplice. L'errore viene generato nel PostAquireRequestState di un modulo. Ciò comporta un reindirizzamento a Error2.aspx, ma viene nuovamente chiamato PostAquireRequestState del modulo. Application.Context.SkipAuthorization è impostato su false quando si carica la pagina di errore (anche con allow users = *). Poiché una nuova pagina viene richiesta da un reindirizzamento, Application.Server.getLastError() non è nulla.Il codice continua a dove ha lanciato l'errore e quindi la pagina di errore non viene visualizzata. Controllare se la richiesta è la pagina di errore potrebbe funzionare, ma sospetto sospetti. –

Problemi correlati