Frage

Beim Erstellen einer mehrsprachigen Website (mit ASP.NET-Webformularen) verwende ich ein HTTP-Modul, um die URLs neu zu schreiben, um am Ende etwas Freundliches (für Menschen und Suchmaschinen) zu erhalten, wie zum Beispiel:

uk/products/product_category_one/sub_category_one/index.aspx
uk/products/product_category_one/sub_category_one/widget_mk5.aspx
es/productos/categoría_de_producto_una/widget_mk5.aspx

Mein (Neulings-)Verständnis von MVC ist, dass die URL das Format haben sollte

Controller / Aktion / Bezeichner

Das Replizieren der oben genannten Funktionalität mit MVC führt also zu URLs ähnlich der folgenden:

products/category/123/product_category_one/sub_category_one
products/items/456/widget_mk5

Fragen..

  • Kann ich vor dem Segment „Controller“ einen Ländercode in die URL einfügen?
  • Ist es möglich, „Produkte“ und „Produkte“ demselben Controller zuzuordnen?

Vielen Dank für Ihre Hilfe

Bearbeiten:Zusätzlich zu Panos‘ Antwort unten habe ich weitere Informationen dazu gefunden ASP.NET-Website.

War es hilfreich?

Lösung

Die URL kann fast jede beliebige andere Form annehmen.Weitere Informationen finden Sie unter ASP.NET MVC Framework (Teil 2):URL-Routing.Nur für den Anfang (da ich nicht sicher bin, ob es die optimale Lösung ist) können Sie Ihrer global.asax zwei neue Routen hinzufügen:

        routes.MapRoute(
            "ukRoute",
            "{lang}/Products/{action}/{id}/{subcategory}",
            new { lang = "uk", controller = "Products", action = "Index", id = "", subcategory = "" }
        );
        routes.MapRoute(
            "esRoute",
            "{lang}/Productos/{action}/{id}/{subcategory}",
            new { lang = "es", controller = "Products", action = "Index", id = "", subcategory = "" }
        );

Diese Routen verstehen die folgenden URLs (und ordnen beide der zu ActionResult Category(string id, string subcategory) Methode von ProductsController):

uk/Products/Category/1/A
es/Productos/Category/1/A

Wenn Sie solche URLs in Ihren Ansichten erstellen möchten, können Sie Folgendes verwenden:

<%= Html.RouteLink("English 1.A", "ukRoute", new { lang = "uk", action = "Category", id = "1", subcategory = "A" })%>
<%= Html.RouteLink("Spanish 1.A", "esRoute", new { lang = "es", action = "Category", id = "1", subcategory = "A" })%>

Andere Tipps

Sie können dies tun, aber denken Sie daran, dass nicht alle Länder sind Sprachen. Zum Beispiel de-de ist die übliche Darstellung für britisches Englisch, oder genauer gesagt, das Großbritannien locale für englische Inhalte, zum Beispiel. Wenn Sie können, es lohnt sich nach den RFC1766 abgeleiteten Konventionen für Sprache-locale.

Suchmaschinen ist in der Regel tatsächlich eine ziemlich gute Arbeit Umgang mit Content-Negotiation zu tun, durch die Art und Weise, so müssen unbedingt haben Sie keine separaten URIs für den gleichen Inhalt in verschiedenen Sprachen. Google Japan wird kriechen mit ja-JP als die Sprache Header akzeptieren, zum Beispiel.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top