ここで車輪を再発明しているように感じますが、キャッチオールから URL を取得し、それを別のルートにリダイレクトする方法を見つける必要があります。
その理由は、特定の URL にセッション Cookie を追加し、それらを関連するアクションに渡すなど、いくつかのことを行う必要があるためです。
これを実装する最良の方法は何ですか?
助けてくれてありがとう!
ここで車輪を再発明しているように感じますが、キャッチオールから URL を取得し、それを別のルートにリダイレクトする方法を見つける必要があります。
その理由は、特定の URL にセッション Cookie を追加し、それらを関連するアクションに渡すなど、いくつかのことを行う必要があるためです。
これを実装する最良の方法は何ですか?
助けてくれてありがとう!
実行時にマスター ページを変更してみることができます。しかし、それは最も美しい解決策ではありません。
ああ、リダイレクトしたくないですか?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にあるはずです、これもそう思います!)コードを繰り返す必要はありませんパートナーに対していくつかの基本的なチェック/アクションを実行する場合は、すべてのアクションで。
これは、その猫の皮をむくための多くの方法についてのまともな記事です。
質問が理解できれば...
以前の質問 ( 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 ルーティングを単体テストする方法を調べると、次のようになりました。
それが正確に適合するかどうかはわかりませんが(つまり、モックする必要はないかもしれません)、すべてのデータが GetRouteData から返されて RedirectToAction メソッドに渡されるようです。
いいえ、事実上はリダイレクトですが、リダイレクトはユーザーには表示されません (Web フォームで Server.Transfer() が行われるのとほぼ同じ方法で)。
あなたが指摘したリンクは 1 つのマスター ページしか使用していませんが、私は多くのマスター ページ (200 近く) を持っています。
これらのパートナーに個別のルート ハンドラーを用意することも考えましたが、マスター ページの選択が問題になりました。
これらの問題を克服するには、ViewExtension を作成する必要があると思います...