2011-07-18 4 views
0

私たちのシステムはADFS2によって認証されたMVC2です。したがって、ユーザーがhttp://www.foo.com/Car/Details/3のブックマークをクリックすると、Carコントローラに当り、Details GETアクションハンドラを呼び出し、IDとして3inをすべての基本MVCのものとして渡します。だから我々は[Authorize]属性で装飾されたこのActionHandlerを持っていて、ADFS2が接続されているので、ページは私たちの認証サーバーにリダイレクトされ、POST(すべての基本的なADFSのもの)でリダイレクトされます。問題は、このリダイレクトがPOSTであるため、私たちのDetails POSTハンドラが呼び出されましたが、明らかに必要なデータがありません。POST ActionHandlerはカスタム属性でGET ActionHandlerを返しますか?

[Authorize] 
[MySpecialHttpGet] 
public ActionResult Details(long id) 
{ 
    var model = GetModel(id); 
    return View(model); 
} 

[Authorize] 
[MySpecialHttpPost] 
public ActionResult Details(long id, ViewModel model) 
{ 
    /***START OF SPECIAL CODE***/ 
    // If we were posted to by ADFS, redirect to the GET handler. 
    if (Request.Form["wa"] != null && Request.Form["wa"].ToLower().Contains("signin")) 
    { 
     // We were posted to here but need to respond with the GET view. 
     return Redirect(Request.Url.AbsoluteUri); 
    } 
    /***END OF SPECIAL CODE***/ 

    var result = Something.SaveData(model); 
    return result.ActionResultToReturnWith; 
} 

これに伴う問題は、私はアプリでにすべての単一のPOSTのActionHandlerこれを行う必要があるということです。

今私は、このシナリオを検出し、このコードは次のようになりますいくつかのコードを確認しています私は本当にそれをしたくありません。これらすべてのActionHandlerに既にカスタム属性があることを考えれば、これらの属性を使用して私にこの機能を注入したいと考えています。

ここでMySpecialHttpGetMySpecialHttpPostは非常に特別なもので、実際にはActionMethodSelectorAttributeを拡張する以外のことを知る必要があります。私はその機能を注入するためにMySpecialPost属性にコードを追加したいと思います。

だから私の質問:

は、どのように私は、この属性にチェックのこの種を実行するためのコードを追加しますか?

答えて

0

今のところ、私たちが望むソリューションが見つからず、すべてのコントローラの初めにそのコード(そのコードを含む関数呼び出し)を単に貼り付けるだけです。

関連する問題