当用户同时使用 [HttpGet] 和 [HttpPost] 重载请求操作方法时处理 WIF SignInResponseMessage (Post)



我认为这个问题的解决方案会出现在我身上,因为我已经坐下来解决这个问题好几个月了-但是我的大脑没有标记出明显的最佳方法。

我有两个控制器方法"Edit",它们被一个动作过滤器保护,导致对STS进行被动身份验证。

[HttpGet]
public ActionResult Edit(Guid id) { [do stuff] }
[HttpPost]
public ActionResult Edit(Guid id, EditViewModel model) { [do stuff] }

问题是,mvc接收SignInResponseMessage,然后触发HttpPost,这不是我想要的…有人接触过这个问题并觉得他们有一个很好的解决方案吗?

我想我可以唯一地命名我所有的动作方法,如果最坏的情况来了,即好的老mvc1编辑()vs更新()/新()vs创建()等。

我有一个解决方案…

不允许STS发布到任何url(并在应用程序中点击任何操作),我使用STS中的设置来发布到一个url,该url具有如下所示的操作方法:

public ActionResult Index() {
    if (MyIdentity.IsAuthenticated) {
        if (ControllerContext.HttpContext.Request["wreply"] != null)
        {
            var returnUrl = ControllerContext.HttpContext.Request["wreply"];
            if (returnUrl.StartsWith(Stgs.WebRt)) { return Redirect(returnUrl); } //make sure the wreply is actually for this application and not a random url
        }
        return Redirect("/"); 
    }
    return View(); 
}

然后在STS中,当我正在构建SignOutResponseMessage时,我添加了一行:

response.SetParameter("wreply", message.Reply);

其中" response "是一个Microsoft.IdentityModel.Protocols.WSFederation.SignInReponseMessage, "message"是一个Microsoft.IdentityModel.Protocols.WSFederation.SignInRequestMessage。这基本上是将wreply添加为提交给依赖方的表单输入。从而使上面的控制器动作代码按预期工作。

最新更新