Domanda

Come puoi vedere, questa è una domanda di uno sviluppatore non web. Vorrei avere una pagina ASPX che, in determinate circostanze, può generare un errore 401 dal codice. Idealmente dovrebbe mostrare la pagina standard IIS.

È stato utile?

Soluzione

Impostare Response.StatusCode e quindi - se devi interrompere l'esecuzione - chiama Response.End ( ) .

Altri suggerimenti

Response.StatusCode = 401;
Response.End();

Penso di preferire ancora:

throw new HttpException(401, "Auth Failed")

Non credo che il metodo Response.StatusCode inneschi errori personalizzati definiti nel file web.config, ad es.

<customErrors mode="On" defaultRedirect="GenericErrorPage.htm">
     <error statusCode="401" redirect="AuthFailed.htm" />
     <error statusCode="403" redirect="NoAccess.htm" />
     <error statusCode="404" redirect="FileNotFound.htm" />
</customErrors>

Il lancio di una nuova eccezione provoca sicuramente errori personalizzati.

Inoltre, potresti utilizzare una funzione di registrazione degli errori a livello di applicazione, come ELMAH o qualcosa, e non credo che il metodo Response.StatusCode sia registrato anche lì.

Nota: ora vedo la domanda che, idealmente, dovrebbe essere mostrata la pagina di errore IIS standard. Ovviamente, le pagine di errore personalizzate sono non desiderate . Vorrei usare il metodo Response.StatusCode in quel caso.

Dovresti essere in grado di usare solo quanto segue, secondo MSDN .

Throw New HttpException(401, "Auth Failed")

Modifica Dopo aver visto le altre risposte impostare il codice di stato sarebbe più appropriato.

Un commento aggiuntivo.

Se una parte della pagina è già stata scritta nel buffer di output, è importante cancellare qualsiasi contenuto bufferizzato o la pagina potrebbe non apparire correttamente.

Questo è abbastanza probabile in un ambiente basato su modelli. per esempio. Pagine master ...

Response.ClearContent();
Response.StatusCode = 401;
Response.End();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top