2011-07-18 21 views
0

我們的系統是通過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上都有自定義屬性,我想使用這些屬性爲我注入這個功能。

現在MySpecialHttpGetMySpecialHttpPost沒有什麼特別的,你真的需要知道的除了他們擴展ActionMethodSelectorAttribute。我會喜歡在MySpecialPost屬性中添加代碼來注入該功能。

所以我的問題:

我將如何代碼添加到這個屬性進行這種檢查的?

回答

0

現在,我們還沒有找到我們想要的解決方案,並且只是在每個控制器的開始粘貼該代碼(以及該代碼中的函數調用)。