10

在构建多语言网站(使用 ASP.NET 网络表单)时,我将使用 HTTP 模块来重写 URL,最终得到一些友好的内容(对于人类和搜索引擎),例如:

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

我(新手)对 MVC 的理解是 URL 应该采用以下格式

控制器/动作/标识符

因此使用 MVC 复制上述功能最终会得到类似于以下内容的 URL:

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

问题..

  • 我可以在“控制器”部分之前的 URL 中插入国家代码吗?
  • 是否可以将“产品”和“产品”映射到同一个控制器?

谢谢你的帮助

编辑: 除了下面 Panos 的回答之外,我还在ASP.NET 网站上找到了更多信息。

4

2 回答 2

12

URL 几乎可以采用您喜欢的任何其他形式。有关详细信息,请查看ASP.NET MVC 框架(第 2 部分):URL 路由。只是为了开始(因为我不确定它是否是最佳解决方案),您可以在 global.asax 中添加两条新路线:

        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 = "" }
        );

这些路由理解以下 URL(并将它们都映射到 的ActionResult Category(string id, string subcategory)方法ProductsController):

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

如果你想在你的视图中创建这样的 URL,你可以使用类似的东西:

<%= 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" })%>
于 2008-11-14T22:46:37.147 回答
3

您可以这样做,但请记住,并非所有国家/地区都是语言。例如,en-gb 是英国英语的常用表示,或者更具体地说,是英国内容的英国语言环境。如果可以的话,值得遵循 RFC1766 派生的语言-LOCALE 约定。

Search engines actually tend to do a fairly good job dealing with content-negotiation, by the way, so you need not necessarily have separate URIs for the same content in different languages. Google Japan will crawl with ja-JP as the accept language header, for example.

于 2008-11-15T06:38:50.627 回答