Das ASP.NET MVC Framework hat seit der offiziellen Herausgabe am 18. März schon viele Anhänger gefunden. Neben der strikten Trennung zwischen Model, View und Controller ist nicht zuletzt der Aufbau der URLs ein wichtiger Faktor für den Einsatz von MVC. Das generelle Routing, welches den URL-Aufbau ermöglicht, wurde von Rouven Haban bereits in Ausgabe 7/8.08 des dot.NET Magazins vorgestellt. Im Folgenden wird nun beschrieben, wie sich das Routing um Mehrsprachigkeit erweitern lässt. Bei ASP.NET WebForms ist der Aufbau der URLs simpel: Der URL zeigt in der Regel direkt auf eine Datei auf der Festplatte. Beispielsweise verweist http://example.com/Basket/Add.aspx direkt auf die Datei Add.aspx im Verzeichnis BASKET der Webanwendung. Diese Seite übernimmt das gesamte Handling selbst, womit alternative Namen erstmal nicht möglich sind. Durch URL Rewriting gibt es jedoch die Möglichkeit, die URLs unabhängig von der tatsächlichen Datei zu gestalten. Neben dem Weglassen der Endung .aspx (http:// example.com/Basket/Add) sind auch ganz andere Strukturen möglich (z. B. http:// example.com/Warenkorb-ArtikelHinzu). Dies ist ein gangbarer, wenn auch teilweise aufwändiger Weg, mehrsprachige URLs zu erzeugen.
Der Aufbau von URLs bei ASP.NET MVC ist grundverschieden von WebForms. Es gibt nicht mehr die eine Datei, die die Webseite repräsentiert. Vielmehr wird ein Controller aufgerufen, der die Anfrage bearbeitet und eine View, also die Webseite an sich, zurückliefert. Die Standardroute von ASP.NET MVC ist in Listing 1 gezeigt. Im URL sind die Namen des Controllers, der Action (welche Methode im Controller ausgeführt wird), sowie eine ID angegeben. Somit wird direkt auf Klassen (Controller) und Methoden (Action) verwiesen.
routes.MapRoute("Default", // Route name"{controller}/{action}/{id}", // URL with parametersnew { controller = "Home", action = "Index", id = "" } // Parameter defaults);
Für internationale Besucher und Suchmaschinenoptimierung ist es wünschenswert, dass der URL nicht nur lesbar, sondern auch an die Sprache des Besuchers angepasst ist. Selbstverständlich kann man dafür auch bei ASP.NET MVC wieder ein URL Rewriting Tool verwenden. Schließlich basiert auch ASP.NET MVC auf dem ASP.NET-Kern. Dieses zusätzliche Routing würde die Wartbarkeit der Anwendung jedoch eher verschlechtern. Zumal wir durch das eingebaute Routing alles haben, was wir brauchen.
Einfacher Ansatz
Der einfachste Ansatz zur Erstellung mehrsprachiger Seiten kann die Erstellung von Controllern in verschiedenen Sprachen sein. Statt einem BasketController gibt es dann auch einen WarenkorbController, PanierController etc., mit entsprechend mehrsprachigen Methoden. Ein erster Ansatz ist in Listing 2 zu sehen. Neben einer größer werdenden Anzahl von Controllern und Methoden müssen aber auch die Views dupliziert werden, da MVC standardmäßig nach den Views in Views\{controller}\{action}.aspx sucht.
public class BasketController : Controller{public ActionResult Add(…){ … }}public class WarenkorbController : BasketController{public ActionResult Hinzufuegen(…){Add(…);}}
Bei kleinen Webanwendungen mag dies ein gangbarer Weg sein. Sobald jedoch mehrere Controller und Sprachen verwendet werden, kann es unübersichtlich werden. Schließlich müssen für jede Sprache neue Controller und Views erstellt werden, die allerdings keine neue Funktionalität mit sich bringen. Um dieses Problem zu umgehen und eine andere Lösung zu finden, muss verstanden werden, wie ASP.NET MVC die Controller und Views ermittelt, und wie das Ausführungsmodell generell funktioniert.




