.Net核心多语言路由

时间:2017-05-10 19:36:12

标签: c# asp.net-core routes asp.net-core-mvc

我想要一个带路线的简单多语言网络应用。

我想要做的是在网址中: zh / products 和 的它/ PRODOTTI 同样的行动。

我创建了两个具有相同动作/控制器的差异路径:

routes.MapRoute(
    name: "english",
    template: "en/products",
    defaults: new { controller = "home", action = "products" }
);
routes.MapRoute(
    name: "italiano",
    template: "it/prodotti",
    defaults: new { controller = "home", action = "products" }
);

当我想拨打我使用的其中一条路线时:

<a href="@Url.RouteUrl("english", new { Action = "home", Controller = "products"})">Products</a>
<a href="@Url.RouteUrl("italiano", new { Action = "home", Controller = "products"})">Prodotti</a>

我得到网址 zh / products 或 的它/ PRODOTTI

问题是,当我想制作一个表格帖子时,我无法控制哪个网址会返回。

<form asp-action="products" method="post">

会返回路线的第一个值。

问题是,当我发送表格时,如何控制我的路线,就像我正在使用Url.RouteUrl链接一样?

我试过了,但这也行不通:

[Route("it/prodotti")]
[Route("en/products")]
public ViewResutl products() {
    ...
    return View(new viewmodel...);
}

2 个答案:

答案 0 :(得分:0)

比表面变化更深刻。 Damien Bod发现了对该主题的参考,

  1. https://damienbod.com/2015/10/21/asp-net-5-mvc-6-localization/
  2. https://github.com/damienbod/AspNet5Localization/tree/master/src/AspNetCoreLocalization
  3. 来源和他对这个主题的写作。

    在解释中,它确实涉及与他演示的webapi相关联的ActionFilter。我认为这是你情况的起点。

答案 1 :(得分:0)

好消息,最后我找到了答案。

    @using (Html.BeginRouteForm("routenamehere"))
    {
    <form>
    ...
    ...
    </form>
    }