私たちのシステムは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に既にカスタム属性があることを考えれば、これらの属性を使用して私にこの機能を注入したいと考えています。
ここでMySpecialHttpGet
とMySpecialHttpPost
は非常に特別なもので、実際にはActionMethodSelectorAttribute
を拡張する以外のことを知る必要があります。私はその機能を注入するためにMySpecialPost
属性にコードを追加したいと思います。
だから私の質問:
は、どのように私は、この属性にチェックのこの種を実行するためのコードを追加しますか?