如何让POST ActionHandler通过自定义属性返回GET ActionHandler?

时间:2011-07-18 16:22:17

标签: asp.net-mvc asp.net-mvc-2 c#-4.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处理程序,但显然它没有我需要的数据。

现在我已经确定了一些检测此场景的代码,这段代码如下所示:

[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属性中添加代码以注入该功能。

所以我的问题:

如何添加代码以在此属性中执行此类检查?

1 个答案:

答案 0 :(得分:0)

目前,我们还没有找到我们想要的解决方案,只是在每个控制器的开头粘贴代码(好吧,在其中使用该代码的函数调用)。