2009-03-06 8 views
1

auf unserer Website machen wir URL-Rewriting, um große Mengen von Datenbank generierten Seiten zu generieren. Auf jeder Seite gibt es ein Login-Steuerelement für Benutzer. wie folgt aus:Url Neuschreiben + Asp.Net Login Form = Death

Interne aspx Seite: /DB.aspx?id=123 Benutzer sichtbar url: /ABC/123.aspx, /ABC/456.aspx ... (url neu geschrieben)

leider Das Tag auf jeder Seite hat das Aktionsattribut "DB.aspx? id = 123". wenn der Benutzer auf die Schaltfläche klickt, puffert der Browser nach /ABC/DB.aspx?id=123, was natürlich nicht existiert.

Lösungen Ich habe versucht: 1. Ändern Sie das Action-Attribut durch Unterklasse HtmlForm. Dies zerstört alle anderen Formen auf der Website. 2. Entfernen Sie das Aktionsattribut (so dass der Browser immer an dieselbe URL sendet). Dies funktioniert auf den neu geschriebenen Seiten, aber auf "/" (die default.aspx im root dir) bekomme ich eine Nachricht, dass der Verb post nicht erlaubt ist auf "/" (iis 6 und ich habe keine Kontrolle über Zuordnungen)

jemand?

Antwort

1

Überprüfen Sie diesen wirklich schönen Blog-Beitrag von Scott Gu, http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx.

"Insbesondere können Sie die neue Erweiterbarkeitsarchitektur des ASP.NET 2.0-Steueradapters nutzen, um das Rendering des Steuerelements anzupassen und seinen Attributwert" action "mit einem von Ihnen angegebenen Wert zu überschreiben um Code in Ihren ASPX-Seiten zu ändern "

Überprüfen Sie den Abschnitt:" ASP.NET PostBacks mit URL Rewriting behandeln ", ich habe den Adapter verwendet, den er erfolgreich veröffentlicht hat.

Ps. Seien Sie sich bewusst, es gibt einige Probleme auf asp.net, wenn URL-Rewrite bei der Verwendung von Session ohne Cookies verwendet wird, und die neu geschriebene URL ist tiefer als die ursprüngliche Seite, genau wie die, die Sie haben. (/ abc/apage vs./db?). Das Problem ist in den Quellcode des Frameworks, es gibt Problemumgehungen, aber das ist ein ganzes Thema (mit Kompromissen :(... Sie könnten sie auf der gleichen Ebene haben wollen).

0

Semantik vielleicht, aber ist die Aktion Attribut = "DB.aspx? Id = 123" oder "/ DB.aspx? Id = 123"? Vorausgesetzt, dass das Umschreiben von URLs die Weitergabe an physische Seiten zulässt, könnte dies Ihr Problem sein.

+0

Ja, das Aktionsattribut ist realtiv. trotzdem möchte ich nicht, dass der Benutzer die DB.aspx sieht. Alle Zugriffe müssen aufgrund von SEO-Optimierungen über die Rewriting-Engine gehen. –

0

Ich habe es nie getan, aber ich sah den Code mit Reflektor und ich denke, man kann es auf diese Weise beheben:

auf der Seite:

this.Form.Action = null; 

oder:

this.Form.SetAttribute("action", null); 

Wenn das nicht funktioniert, nur setzt die Pfad y ou wollen:

this.Form.SetAttribute ("action", "ABC/123.aspx");