2010-12-15 11 views
0

のは、私がこのようなURLがあるとしましょう:asp.net MVCのルートに「部品」がないとリダイレクトする方法は?

www.site.com/en/home/list/2010-09-30 

「en」が英語のためである、と私は、URLの言語トークンセットが常にあることを確認します。ユーザーがwww.site.com/home/list/2010-09-30と入力した場合は、www.site.com/en/home/list/2010-09-30(デフォルト言語はen)にリダイレクトします。

これは、asp.net MVC(バージョンが重要な場合)でどのように達成されますか?

答えて

2

これはおそらく、カスタムHttpModuleで処理するのが最適です。私はあなたがすでに知っていると確信していますが、その場合にはルート宣言でルート値 "en"を省略することもできます。ページをリダイレクトしませんが、URLに存在しない場合は常にコードに設定されます。

routes.MapRoute(
       "WildCard", 
       "{*url}", 
       new { controller = "Main", action = "EnglishDefault" } 
      ); 

は、その後、あなたのアクションは次のようになります:

context.MapRoute(
    "Default", 
    "{culture}/{controller}/{action}/{id}", 
    new { culture = "en", action = "Index" }); 
+0

カスタムHttpModuleでこれがどのように処理されるかの例がありますか?私はここに記述されているようにHttpModuleを作成したいと思います:http://wiki.asp.net/page.aspx/909/custom-http-module/しかし、私はこれまでに言語をチェックする方法、ルートにアクセスできますか? – Chaddeus

0

簡単な解決策は、ワイルドカードのルートを持っているだろう(これはあなたのGlobal.asaxファイルの一番下にあるべきである)

public ActionResult EnglishDefault (string url) 
{ 
    return Redirect("/en/" + url); 
} 
+0

ワイルドカードのルートは私が記述したURLの違いをキャッチしますか?ワイルドカードルートに到達しないようだ...私はルートで少し遊ぶだろう。アイデアをありがとう。 – Chaddeus

+0

@Chad - 適切にフォーマットされたURLを処理するために、このワイルドカードルートの上にルートが定義されていることを確認します。このルートはルートテーブルの一番下にあり、キャッチとして使用され、正しいフォーマットに再調整されます。 – amurra

関連する問題