2008-09-17 5 views
4

カスタムMvcRouteHandlerを提供した経験がある人はいますか?私のアプリケーションでは、http:// mydomain/en/aboutまたはhttp:// mydomain/de/aboutのようなグローバリゼーションパターンを実装したいと思います。MVC C#カスタムMvcRouteHandler - どのように?

永続性については、リクエストが到着するとすぐにクッキーを読んでください。このクッキーに言語設定が適用されている場合は、に到着するユーザーがhttp:// mydomain/に転送することができます(例:http:// mydomain/en/)。クッキーが存在しない場合は、ブラウザがサポートする最初の言語を取得して、このCookieに適用して保存します。

これは、mvcが初期プロジェクトテンプレートで提供する標準的なルーティングメカニズムではできないと思います。ニュースグループでは、MvcRouteHandlerを見て自分自身を実装するヒントを得ました。しかし、それを行う方法のサンプルを見つけるのは難しいです。

アイデア?

答えて

2

あなたがやっていることに対してカスタムルートハンドラが必要とは思われません。

"グローバル化された" URIの場合、 "locale"パラメータが "en"、 "de"などに等しくなければならないという制約のある、通常のMVCルートです。この制約により、グローバル化されていないURIがルートに一致しないようになります。

"グローバル化されていない" URIの場合、単純にデフォルトまたはクッキー設定のロケールURIにリダイレクトする「キャッチオール」ルートを作成します。

グローバル化されたルートをGlobal.asaxの "catch-all"ルートの上に配置して、 "既にグローバル化された" URIがリダイレクトにならないようにします。

特定のURIパターンでコントローラ上のアクションではないものがトリガされるようにするには、新しいルートハンドラを作成する必要があります。しかし、私はそれがあなたが扱っているものだとは思わない、ここで。

0

これは、ASP.NET MVCのデフォルトテンプレートで行うことができるはずです。私は似たようなことをしています。

言語クッキーをチェックするコントローラに行く既定のルートを設定し、そのクッキーに基づいてユーザーをリダイレクトします。