19.11.2010, 16:54 Uhr

Neuerungen bei ASP.NET 4.0 (Teil 2)

In der letzten Ausgabe dieser Rubrik wurde erläutert, wie auf die Generierung von serverseitigen Identifier für ASP.NET Steuerelemente Einfluss genommen werden kann. In dieser Ausgabe wird das Thema URL Routing beleuchtet
von Marc André ZhouDie Aspx-Seiten einer ASP.NET-basierten Anwendung werden in der Regel über eine URL adressiert und damit direkt angesprungen. Werden Detailinformationen benötigt, um bestimmte Inhalte anzuzeigen, werden diese über den QueryString-Parameter übergeben, was zu den typisch unschönen URL führt (z.B. http://www.shop.de/moebel?category=2342&company=AKAO&pid=2223T22 ). Nicht nur, das solche URLs schlecht lesbar sind, diese URLs können nicht optimal von Suchmaschinen ausgewertet werden. ASP.NET bietet daher schon seit der Version 3.5 Möglichkeiten, um sog. SEO-.URLs (Search Engine Optimization ) zu erzeugen. Mit ASP.NET 4.0 wird der Implementierungsaufwand dafür noch einmal reduziert.Das Ziel einer SEO optimierten URL soll es sein, die Verständlichkeit für Mensch und Maschine zu verbessern. Die eingangs genannte URL laut in einer "SEO-basierten" Form: http://www.shop.de/moebel/Sessel/BEST-Furniture/Model-LiangoBeach. Anhand der URL-Struktur lässt sich auf einfache Art und Weise ermitteln, was sich hinter der URL verbirgt. Auch Suchmaschinen können die einzelnen Bestandteile extrahieren und verarbeiten. Eine SEO-optimierte URL zeichnet sich insbesondere dadurch aus, dass keine QueryString-Parameter verwendet werden und die URL die notwendigen Steuerungsinformationen enthält. Webanwendungen, die auf dem ASP.NET MVC Modell aufsetzen, verwenden standardmäßig sprechende URLs. Aber auch das altbewährte ASP.NET Web-Form-Modell ermöglicht - wie im weiteren Verlauf praktisch demonstriert wird - die Umsetzung sprechender Links.Zwar war es bereits bei früheren ASP.NET-Versionen möglich, SEO basierte URLs zu realisieren. Allerdings war der Aufwand oft ein wenig zu hoch. Mit ASP.NET 4.0 wird das alles um einiges einfacher. Meine URL soll schöner werdenDie einfachste Möglichkeit, eine URL sprechend zu gestalten, bestand bei ASP.NET 3.5 darin, die Request.PathInfo-Eigenschaft zu benutzen. Mit ihrer Hilfe konnten auf einfache Art und Weise QueryString-Parameter vermieden werden (Abb. 1 zeigt ein Beispiel).Wird z.B. die Seite mit der URL http://.../RoutingOld/SimpleSEO.aspx/MyVendor aufgerufen, besitzt die Variable vendor nach der Auswertung den Wert MyVendor. Reicht diese einfache Möglichkeit nicht aus, muss ein eigenes HttpModule implementiert werden, das eine URL-Umschreibung ("URL Rewriting") durchführt. Das URL-Rewriting kann auch innerhalb der Global.asax im Ereignis BeginRequest durchgeführt werden. In diesem Fall kann auf ein eigenständiges HttpModule verzichtet werden (Abb. 2 zeigt ein entsprechendes Beispiel). Der Aufruf der URL http://.../Portal/Germany/DE/ClientProspects/Home.aspxleitet die Anfrage an die Default.aspx-Seite und übergibt der Seite notwendige Informationen über QueryString-Parameter. Neu: System.Web.RoutingZusätzlich zu den gezeigten Beispielen existieren noch weitere Möglichkeiten, um SEO basierte URLs zu erzeugen. Mit dem .NET Framework 3.5 SP1 kam neue Klassen hinzu, die eine einfachere Umsetzung versprechen. Die Klassen wurden aber nicht neu entwickelt, sondern aus dem ASP.NET MVC-Modellprojekt übernommen. Das von Microsoft entwickelte Modell enthielt im Namespace System.Web.Routing als Kernbestandteil schon immer eine umfangreiche "Routing-Engine". Diese Bibliothek wurde von MVC spezifischen Abhängigkeiten bereinigt und dem .NET 3.5 SP1 hinzugefügt. Wie einfach das Neuschreiben einer URL in Zukunft wird macht das Beispiel in Abb. 3 deutlich. Die Bezeichner innerhalb der Klammern {} stellen Platzhalter für dynamische Werte dar, den QueryString-Parametern vergleichbar. Damit eine Route verarbeitet werden kann, muss eine eigene Route-Klasse implementiert werden, die ankommende Anfragen (Requests) entgegennimmt und an die Zielseite weiterleitet. Um den Handler umzusetzen, muss lediglich eine Klasse realisiert werden, die die Schnittstelle IRouteHandler implementiert. Abb. 4 zeigt ein vollständiges Beispiel. Eine Instanz der Klasse muss bei der Definition einer Route übergeben werden (die Klasse PortalRouteHandler in Abb. 3). Danach kann eine bestimmte Seite über die URL http://.../Routing/Home/Germany/DE/Markets geöffnet werden. Der eigene Route-Handler extrahiert die einzelnen Bestandteile der URL und fügt die einzelnen Werte dem aktuellen HttpContext hinzu. Die Seite, in diesem Fall wird auf die Default.aspx-Seite verwiesen, kann wie in Abb. 5 dargestellt auf die einzelnen Werte zugreifen.Weitere Verbesserungen bei ASP.NET 4.0ASP.NET 4.0 führt weitere Verbesserungen für das URL-Routing ein, die den Implementierungsaufwand weiterer reduzieren. Wie auch unter .NET 3.5 müssen zunächst gültige Routen definiert werden. Dies kann unter .NET 4.0 auch innerhalb des Ereignisses Application_Start innerhalb der Global.asax erfolgen (Abb. 6). Bei der Festlegung der Routen fällt auf, dass keine eigene RouteHandle-Klasse mehr benötigt wird. Wird mit dem Start der Anwendung die URL http://.../Home/Germany/DE/Markets aufgerufen, leitet der Routing-Mechanismus den Aufruf zur physikalischen Default.aspx-Seite. Innerhalb der Seite wird auf die verschiedenen Parameter, die Teil der URL sind, über die Page.RouteData-Auflistung zugegriffen werden. Abb. 7 zeigt die dazu notwendige Vorgehensweise.   Nicht nur in der Code-Behind-Seite kann auf die URL-Parameter zugegriffen werden. Auch innerhalb von Aspx-Seiten kann deklarativ auf die Werte Bezug genommen werden: <asp:label runat="server" text="<%$RouteValue:Country%>">Über diesen Weg können dann z. B. auch Select-Parameter einem SQLDataSource-Steuerelement übergeben werden.Müssen innerhalb einer Anwendung dynamisch neue URL"s erzeugt werden, stehen zwei neue Expression Builder bereit. Bezogen auf das obere Beispiel soll auf einer Seite ein Link zu einer anderen Sprachversion verfügbar sein. Die Platzhalter Country und Language müssen dazu dynamisch angepasst werden. Abb. 8 zeigt die dazu notwendige Expression innerhalb der Aspx-Seite. Der dadurch erzeugte Link besitzt den folgenden Aufbau: http://.../Home/UnitedStates/US/Prospects.</asp:label> <asp:label runat="server" text="<%$RouteValue:Country%>"></asp:label> FazitDer in ASP.NET 4.0 vorhandene Routing-Mechanismus ist leicht verwendbar und unterstützt vollständig das ASP.NET Postback-Modell. Auch der serverseitige form-Tag behält im action-Attribut die korrekte URL bei. In früheren ASP.NET-Versionen musste dies meist durch ein eigenes Control sichergestellt werden. Die Verwendung sprechender und SEO-Links steht also nichts mehr im Weg.Marc André Zhou ist als Software-Entwickler tätig.Peter Monadiemi


Das könnte Sie auch interessieren