J'ai beaucoup de liens brisés qui ne sont pas enregistrés. Existe-t-il un moyen de configurer IIS pour qu'il les envoie via ASP.NET de manière à ce que la routine normale de journalisation 404 les attrape ?
Réponses
Trop de publicités?Vous pouvez utiliser la méthode du hack "host MVC on IIS 6". Il s'agit de configurer un mappage joker .* dans IIS et de faire en sorte que la dll aspnet_isapi.dll gère cette demande, ce qui revient à faire en sorte que .NET gère toutes les demandes. Il est possible que les performances diminuent (probablement de façon minime), mais cela ne devrait pas affecter votre routine de journalisation.
Si vous utilisez IIS7, vous pouvez utiliser l'élément de configuration httpErrors. Cet élément vérifie (après le traitement de la demande) le code de réponse qui a été envoyé à la sortie, et vous permet d'intercepter des appels, tels que :
<httpErrors existingResponse="PassThrough">
<remove statusCode="404" />
<error statusCode="404" responseMode="ExecuteURL" path="/PageNotFound.aspx" />
</httpErrors>
Il ressemble beaucoup au mécanisme customErrors d'ASP.NET, à l'exception du fait qu'il est traité plus tard dans le pipeline. Dans l'exemple ci-dessus, je lui demande d'exécuter l'URL /PageNotFound.aspx lorsqu'il rencontre un 404. Il faut cependant faire attention, car si vous envoyez un 404 à partir de la page PageNotFound.aspx (ce que vous feriez normalement !), elle peut être prise dans une redirection cyclique. Pour contourner ce problème, nous ajoutons l'attribut suivant :
existingResponse="PassThrough"
Il s'agit de déterminer si la réponse actuelle a déjà un corps et, si c'est le cas, de le transmettre (sans traiter le code d'état).
J'ai publié ceci sur mon blog il y a un certain temps : http://www.fidelitydesign.net/?p=21
J'espère que cela vous aidera :)