Question

Comme vous pouvez le constater, cette question a été posée par un développeur non-web. Je voudrais avoir une page ASPX qui, dans certaines circonstances, peut générer une erreur 401 à partir de code. Idéalement, la page standard IIS devrait apparaître.

Était-ce utile?

La solution

Définissez Response.StatusCode , puis - si vous devez arrêter l'exécution - appelez Response.End ( ) .

Autres conseils

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

Je pense que je préfère toujours:

throw new HttpException(401, "Auth Failed")

Je ne pense pas que la méthode Response.StatusCode déclenche des erreurs personnalisées définies dans le fichier web.config, par exemple.

<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>

Le lancement d'une nouvelle exception déclenche définitivement des erreurs personnalisées.

Vous pouvez également utiliser une fonction de journalisation des erreurs au niveau de l'application, telle que ELMAH ou quelque chose, et je ne pense pas que la méthode Response.StatusCode y soit consignée.

Remarque: je vois maintenant la question suivante: idéalement, la page d'erreur IIS standard devrait être affichée. De toute évidence, les pages d'erreur personnalisées ne sont pas souhaitées . J'utiliserais la méthode Response.StatusCode dans ce cas.

Vous devriez pouvoir simplement utiliser ce qui suit, selon MSDN .

Throw New HttpException(401, "Auth Failed")

Modifier Après avoir vu les autres réponses, il serait plus approprié de définir le code d'état.

Un commentaire supplémentaire.

Si une partie de la page a déjà été écrite dans le tampon de sortie, il est important d'effacer tout contenu mis en mémoire tampon, sinon la page pourrait ne pas s'afficher correctement.

C’est très probablement dans un environnement basé sur un modèle. par exemple. Les pages maîtres ...

Response.ClearContent();
Response.StatusCode = 401;
Response.End();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top