2012-01-10 11 views
3

私は他の登録済みアフィリエイトサイトからの紹介を追跡する必要のあるサイトを持っています。これらのパートナーはそれぞれ、自分のサイト内の任意のページにリダイレクト、およびクエリ文字列などに自分のトラッキングパラメータを追加することができます:私は、サイトが最初の「紹介者」オブジェクトがされているかどうかを確認したい各リクエストにASP.net MVCがすべてのリクエストでクエリ文字列paramをチェックする

http://www.somesite.com/Home/About?i=ABCDEFG&t=65DCEFC2-2B73-429C-BA23-C824BFD01844 

をセッションに格納されます。そうでない場合は、これらのパラメータの存在をチェックし、対応するIntroducerオブジェクトを保存します(または、提供されていない場合はデフォルトを使用します)。私は現在、選択されたコントローラ/アクションに実装されているだけですが、手動でコードを呼び出していますが、自動的に実行したいと思っています。カスタムルートハンドラがこれに最適でしょうか?コントローラーの基本クラスでOnActionExecutingをオーバーライドしてここで処理しますか?

+0

あなたの要件は*ごと*要求された場合、あなたが持っているであろうから、それを処理するのに最適な場所は、カスタムルートハンドラになり、私には思えますそれ以外の場合はすべてのコントローラーの基本クラスを継承します。 –

+0

@Robert Harvey - コントローラごとに基本クラスを継承することには欠点がありますか? – Macros

+0

大変不便です。ベストプラクティスの観点からは、ルーティングの問題であり、ルーティングで処理する必要があります。 –

答えて

3

Action Filterを作成します。

アクションフィルタ内のすべてのルートデータにアクセスし、必要な処理を実行できます。あなたはGlobal.asaxでグローバルフィルタとして設定できます。

public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
{ 
    filters.Add(new CustomFilter()); 
} 
+0

はい...これはおそらく正しいアプローチだろう。ここにカスタム 'AuthorizationFilter'を作成する例があります:http://stackoverflow.com/questions/2322366 –

+0

グローバルフィルタとして登録しています...それは私が行方不明だったビットです、ありがとう! – Macros

関連する問題