Zu wissen, dass es (mindestens) drei APIs, die intern Thread.Abort
verwenden, würde Ich mag mehr Praxis beantworten in, wie man herausfinden, was zu tun ist .
Für uns wurde dieser Fehler plötzlich protokolliert. Was hat sich geändert? Wir haben einen Fehler in einer Datenbankprozedur behoben, die sich mit Sitemaps beschäftigt.
Die log4net Protokolle zeigten die X-Forwarded-For-Header (wir sind hinter einem NLB) war Googlebot IP-Adresse 66.249.78.x, die meine Theorie über die Änderung der Sitemap zu Google Crawlen unsere Website aggressiver suchen für Bilder.
Die erste Sache war, herauszufinden, warum nur der Googlebot dieses Problem verursachen konnte. Kein anderer Client hat ausgelöst, welcher Codepfad Response.Redirect
oder was auch immer verwendet.
So in den HttpApplication.Error
Handler, fügte ich einigen Code zusätzlichen detaillierte Ausgabe mit allen Header zu protokollieren, und die meisten Daten in den HttpResponse
und HttpContext
loggen gespuckt.
Diese lassen Sie mich sehen, dass das Problem war, dass der Googlebot ein iPhone-User-Agent-String verwendet und damit bewaffnet, konnte ich die Code-Basis für „iPhone“ suchen und kommen mit:
private void CheckIPhoneAccess() { ... }
Und das verwendet eine Umleitung.
Was kann ich dagegen tun?
Nun, für diese alte Codebasis lohnt es sich nicht, alle Response.Redirect
Aufrufe zu retro-patchen, also werde ich den Logging-Level für ThreadAbortException
für die Anwendung senken.
Ich werde das Verhalten für die mobilen Crawler Googlebot ändern, dass nicht führen zu ‚Lügen‘ würde über das, was unsere Website dient, da es Umleitungen auf dem ersten Treffer nur auf Handys, es anschließend ein Cookie liest und zeigt das Bild. Der Googlebot scheint diesen Cookie nicht zwischenzuspeichern.
Es ist nicht perfekt, aber die Website soll wieder aufgebaut werden. wahrscheinlich von einem anderen Team, das Scala oder so verwendet, also denke ich, dass dies eine gute Wahl ist. Ich werde Kommentare hinzufügen und später die Frage erneut kann, bauen eine Response.SafeRedirect
Erweiterung, die diesen Rat kapselt:
Why Response.Redirect causes System.Threading.ThreadAbortException?
Luke
Beachten Sie, dass der obige Link unterbrochen ist – JoshL
Erics Antwort ist korrekt, aber Sie sollten wissen, dass die Übergabe des falschen Parameters bedeutet, dass der aktuelle Thread nicht abgebrochen wird, d. H. Der Code nach Response.Redirect wird ausgeführt. – CodeClimber