我們的系統是通過ADFS 2進行MVC2認證的。所以當用戶點擊書籤http://www.foo.com/Car/Details/3
時,這會觸發我們的Car
控制器,並調用我們的Details
GET操作處理程序並傳入3作爲ID(所有基本MVC內容)。所以我們用這個ActionHandler裝飾了[Authorize]
屬性,並將ADFS2連接起來,這樣頁面就會重定向到我們的auth服務器,然後再重定向到我們的應用程序,但是使用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我真的不想那樣做。鑑於我已經在所有這些ActionHandlers上都有自定義屬性,我想使用這些屬性爲我注入這個功能。
現在MySpecialHttpGet
和MySpecialHttpPost
沒有什麼特別的,你真的需要知道的除了他們擴展ActionMethodSelectorAttribute
。我會喜歡在MySpecialPost
屬性中添加代碼來注入該功能。
所以我的問題:
我將如何代碼添加到這個屬性進行這種檢查的?