Ich verwende Context.RewritePath() in ASP.NET 3.5-Anwendung, die auf IIS7 ausgeführt wird.IIS7, RewritePath und IIS-Protokolldateien
Ich mache es in der Anwendung BeginRequest Ereignis und alles funktioniert Datei.
Anforderungen für/Sport werden korrekt in default.aspx? Id = 1 umgeschrieben, und so weiter.
Das Problem ist, dass in meinem IIS-Protokoll sehe ich GET-Anfragen für /Default.aspx?id=1 und nicht für/Sport.
Diese Art von Code funktionierte perfekt unter IIS6.
Das Verwenden des Microsoft Rewrite-Moduls ist keine Option, da einige Geschäftslogik implementiert werden muss.
Danke.
EDIT:
Es scheint, mein Handler zu früh in der Pipeline ist, aber wenn ich die Logik zu einem späteren Ereignisse bewegen, als die ganze Rewrite Sache nicht funktioniert (es zu spät ist, StaticFileHandler nimmt meine anfordern).
Ich googelte und googelte, fragte herum, kann nicht glauben, dass niemand dieses Problem hat?
BEARBEITEN:
Huch! Hier ist, was ich im IIS-Forum gefunden:
"Dies ist, weil im integrierten Modus, IIS und asp.net eine gemeinsame Pipeline teilen und der RewritePath jetzt von IIS gesehen wird, während in IIS6 wurde es nicht einmal von IIS gesehen - Sie können dies umgehen, indem Sie den klassischen Modus verwenden, der sich wie IIS6 verhält. "
Schluss Update: Bitte einen Blick auf my answer below nehmen, ich habe es nach mehr als ein Jahr in der Produktionsumgebung mit den Ergebnissen aktualisiert.
Muerte, der richtige Weg dies zu tun wäre, um Ihre eigene Frage zu beantworten. Sie haben angegeben, dass dieses Problem korrekt sein kann, indem Sie IIS 7 in den klassischen Modus versetzen, der genauso wie IIS 6 ausgeführt wird. Solange Sie feststellen, dass Sie nicht von den Sicherheits- oder Leistungsupgrades im neuen IIS 7 profitieren Es scheint eine vernünftige Antwort zu sein. – Spence
Ich verstehe, dass ich meine eigene Frage beantworten kann, aber ich betrachte das nicht als eine Antwort und ich bin immer noch auf der Suche. :) Ich probiere einige Dinge aus, und ich werde definitiv mein Ergebnis hinzufügen, entweder als Antwort oder als letzte Bearbeitung meiner Frage. – muerte
Ich würde (und habe) nur die System.Web.Routing-Assembly über Reflector betrachten. Um zu sehen, wo man es anschließen kann. IIRC, müssen Sie es bei PostMapRequestHandler und PostAcquireRequestState tun. – leppie