0

ユーザーが投稿したコンテンツを 30 以上の言語でフロント ページに表示する Web サイトがあります。現在、次のようなパスを使用しています。

http://www.example.com?lang=en 

またはそれが最初のページでない場合

 http://www.example.com?lang=en&page=2

しかし、それは実際にはユーザーフレンドリーでもSEOフレンドリーでもありません。これらの値を次のようなものにルーティングする方法はmvcにありますか

 http://www.example.com/en 

 http://www.example.com/en/2

この場合のように間に新しいアクションを追加することなくlang:

http://www.example.com/lang/en/2

アップデート。誰かが同じものを必要とする場合に備えて、アレクセイの回答から思いついたものを次に示します。

言語のみの場合:

 routes.MapRoute("MyLang", "{lang}", new { controller = "Home", action = "Index" },new { lang = @"\D{2}"});

言語と必要に応じてページが必要な場合:

   routes.MapRoute("MyLang", "{lang}/{page}", new { controller = "Home", action = "Index", page = UrlParameter.Optional }, new { lang = @"\D{2}", page = @"\d+"});

2文字しかないアクションがない限り、他のパスをキャッチするべきではありません。

4

2 に答える 2

1

カルチャに一致するルートに「lang/」は必要ありません。他のルートが正しく一致するようにルートを並べ替える限り、単純な "{lang}" で十分です。競合の数を制限するために、ルーティング パラメータの制約を検討することもできます。

routes.MapRoute("MyLang", "{lang}",
     new { controller = "Home", action = "Home",  }

class HomeController{
  public ActionResult Home(string lang)
  {
    return View();
  }
}
于 2012-04-23T16:41:40.773 に答える
0

このような新しいルートを追加できます

routes.MapRoute("MyLang", "{action}/{page}",
     new { controller = "ControllerName",page=0 }

このようにして、言語名が自動的にアクションにマップされ、ページがパラメータとして渡されます.

public ActionResult English(int page)

明らかに、戻り値の型とアクション名を変更できます

于 2012-04-23T16:46:23.043 に答える