2

ここで車輪を再発明しているように感じますが、キャッチオールから URL を取得し、それを別のルートにリダイレクトする方法を見つける必要があります。

その理由は、特定の URL にセッション Cookie を追加し、それらを関連するアクションに渡すなど、いくつかのことを行う必要があるためです。

これを実装する最良の方法は何ですか?

助けてくれてありがとう!

4

4 に答える 4

2

実行時にマスター ページを変更してみることができます。しかし、それは最も美しい解決策ではありません。

テーマのサポート

于 2008-11-20T08:05:38.873 に答える
0

ああ、リダイレクトしたくないですか?URL を残したい場合:

mysite.com/partners/pepsi/products/cola.htm

しかし、提供します:

mysite.com/products/cola.htm

私は自宅に MVC を持っていませんが、代わりにルートを別の方法で定義できませんか?

それ以外の:

routes.MapRoute(
    "Partner",
    "partners/{partner}/{*wildcard}",
    new { controller = "Partners", action = "PartnerRedirect" }
);

行う:

routes.MapRoute(
    "Partner",
    "partners/{partner}/{controller}/{action}/{other stuff you need}",
    new { /* whatever defaults you want */ }
);

アクションには、なんでもできるパートナー変数があり、ルート制約をパートナーに追加して、有効なものだけが一致するようにすることができます。

(私は思う)次に、アクション/コントローラーでアクションフィルターを使用して、パートナーパラメーターに基づいて適切なアクションを実行できると思います(フィルターのhttpcontextにあるはずです、これもそう思います!)コードを繰り返す必要はありませんパートナーに対していくつかの基本的なチェック/アクションを実行する場合は、すべてのアクションで。

これは、その猫の皮をむくための多くの方法についてのまともな記事です。

http://weblogs.asp.net/stephenwalther/archive/2008/08/12/asp-net-mvc-tip-31-passing-data-to-master-pages-and-user-controls.aspx

于 2008-11-16T22:40:29.873 に答える
0

質問が理解できれば...

以前の質問 ( redirect-to-controller-but-with-a-different-master-using-a-catchall-wildcard ) を見て、次からワイルドカードを取得します。

routes.MapRoute(
    "Partner",
    "partners/{partner}/{*wildcard}",
    new { controller = "Partners", action = "PartnerRedirect" }
);

Partners/PartnerRedirect アクションでは、ワイルドカードで指定された正しいコントローラー/アクションに送信しますか?

これを行う最善の方法はわかりませんが、URL ルーティングを単体テストする方法を調べると、次のようになりました。

http://weblogs.asp.net/stephenwalther/archive/2008/07/02/asp-net-mvc-tip-13-unit-test-your-custom-routes.aspx

それが正確に適合するかどうかはわかりませんが(つまり、モックする必要はないかもしれません)、すべてのデータが GetRouteData から返されて RedirectToAction メソッドに渡されるようです。

于 2008-11-15T02:51:31.613 に答える
0

いいえ、事実上はリダイレクトですが、リダイレクトはユーザーには表示されません (Web フォームで Server.Transfer() が行われるのとほぼ同じ方法で)。

あなたが指摘したリンクは 1 つのマスター ページしか使用していませんが、私は多くのマスター ページ (200 近く) を持っています。

これらのパートナーに個別のルート ハンドラーを用意することも考えましたが、マスター ページの選択が問題になりました。

これらの問題を克服するには、ViewExtension を作成する必要があると思います...

于 2008-11-17T09:12:37.960 に答える