Impossible de renvoyer l'état HTTP 404 pour la page d'erreur personnalisée dans ASP.NET


TecMan

L'un de nos anciens sites Web basés sur la technologie ASP.NET classique a été déplacé vers un nouvel hébergement. Il s'agit maintenant d'un cloud exécutant Windows Azure Pack dans lequel notre site s'exécute sous .NET Framework 4.6.1.

Cependant, je ne peux toujours pas renvoyer une page d'erreur personnalisée pour une ressource .aspx non existante avec le statut HTTP correct 404 - le statut est toujours 302. À l'origine, la page d'erreur 404 personnalisée a été définie comme ceci dans web.config:

<system.web>
    <customErrors mode="RemoteOnly" defaultRedirect="/error/server-error.aspx">
        <error statusCode="404" redirect="/error/resource-not-found.aspx"/>
    </customErrors>
</system.web>

J'ai lu des articles SO comme celui-ci et essayé les réponses suggérées, y compris la définition du redirectMode sur ResponseRewrite, mais rien n'a aidé ou n'a pas fonctionné comme prévu.

Ai-je manqué quelque chose ou y a-t-il une autre solution?

TecMan

J'ai réussi à surmonter ce problème. Tout d'abord, j'ai désactivé la redirection pour l'erreur 404 dans web.config:

<system.web>
    <customErrors mode="RemoteOnly" defaultRedirect="/error/server-error.aspx">
        <!-- <error statusCode="404" redirect="/error/resource-not-found.aspx"/> -->
    </customErrors>
</system.web>

Ensuite, j'ai ajouté le gestionnaire d'événements Application_Error suivant à mon Global.asax:

Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
    Dim serverError As HttpException = DirectCast(Server.GetLastError(), HttpException)

    If Not serverError Is Nothing Then
        If 404 = serverError.GetHttpCode() Then
            Server.ClearError()
            Server.Transfer("/error/resource-not-found.aspx")
        End If
    End If
End Sub

Enfin, j'ai ajouté les lignes ci-dessous à ma page Erreur 404. (resource-not-found.aspx):

Sub Page_Load()
    ' If you're running under IIS 7 in Integrated mode set,
    ' use this line to override IIS errors:
    Response.TrySkipIisCustomErrors = True

    Response.StatusCode = 404
    Response.StatusDescription = "Page not found"
End Sub

Pour info: si vous utilisez la technologie MasterPage, seule la partie variable de votre MasterPage est redirigée. Après avoir joué avec des ressources inexistantes dans diverses sections de notre site Web, j'ai trouvé ce comportement intelligent et utile pour nos utilisateurs finaux.

UNE CHOSE DE PLUS. Pour renvoyer le code d'état HTTP 404 pour les ressources non ASPX, j'utilise le paramètre suivant dans mon web.config:

<system.webServer>
    <httpErrors errorMode="Custom" defaultResponseMode="Redirect">
        <remove statusCode="404"/>
        <error statusCode="404" path="/error/resource-not-found.aspx" responseMode="ExecuteURL"/>
    </httpErrors>
</system.webServer>

Faites attention au responseMode défini sur 'ExecuteURL' pour l'erreur 404.

Articles connexes


Page personnalisée pour l'URL de la page HTTP 404 dans Jenkins

Asr Mon Jenkins fonctionne sur https: // myhost: 9043 en utilisant la guerre autonome sur Linux avec la commande ci-dessous. java -jar jenkins.war Cependant, lorsque j'essaie l'URL suivante, disons que https://myhost:9043/<any random text>l'URI de la ressourc

Page d'erreur 401 personnalisée pour l'application ASP.NET MVC

Alexandre J'ai créé une application ASP.NET MVC qui utilise l'authentification Windows intégrée. La logique d'autorisation suivante a été implémentée: Essayez d'obtenir les informations d'identification du compte depuis Active Directory via NTLM. Si les inform