我们的系统是由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处理程序,但显然它没有我需要的数据。
现在我已经确定了一些检测此场景的代码,这段代码如下所示:
[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
属性中添加代码以注入该功能。
所以我的问题:
如何添加代码以在此属性中执行此类检查?
答案 0 :(得分:0)
目前,我们还没有找到我们想要的解决方案,只是在每个控制器的开头粘贴代码(好吧,在其中使用该代码的函数调用)。