我在我的 ASP.net MVC 3 网站(也在 Azure 中托管)中使用 Azure ACS,场景如下: 用户首先进入我的网站并填写单字段表单,然后他们需要选择提供商并登录,但首先我想存储字段值,以便当他们登录回来时我能够创建具有该值的配置文件对于登录的用户。
所以我相信当他们第一次进入网站然后离开登录并再次进入网站时,这是两个不同的 session ,对吗?这就是使用 session 状态(通过 SQL Server)存储的数据在登录后返回时不存在的原因,对吗?如果这是真的,那么最好的方法是什么?如果不是,那么我在存储临时数据时做错了什么?
谢谢
更新: 我发现 HttpContext.Application 状态可以保存数据,但我仍然不确定考虑到它在 Azure 中,在 Controller 中使用它是否是一个好主意,它是否可以在生产中正常工作?
最佳答案
您可以使用 wctx URL 参数在 WS-Federation 重定向序列中传递状态。在处理初始 POST 请求的操作中,您应该获取要保留的表单参数,然后重定向到身份提供商选择页面(这必须是自定义页面),并将表单参数附加到 URL。当用户在您的页面上选择 IP 时,您可以使用 wctx 参数再次传递该参数。 WS-Federation 被动请求者配置文件表示,当 IP 将用户重定向回您的站点时,最终应将其返回给您。
这有一些细节
http://msdn.microsoft.com/en-us/library/bb608217.aspx
编辑:当用户最终返回您的应用时,从请求中获取 wctx 参数。在操作代码中添加如下内容:
var fam = FederatedAuthentication.WSFederationAuthenticationModule;
if (fam.CanReadSignInResponse(System.Web.HttpContext.Current.Request, true))
{
string wctxValue = this.HttpContext.Request.Form["wctx"];
}
我的偏好是让 wcxt 参数代表一个重定向 URL(URL 编码),并将您的参数作为查询参数,因此它是以下内容的 URL 编码版本:
wctx=https://yourserver/yourapp/yourpage?yourparameter=foo
然后,从 ACS 接收重定向的操作将简单地提取 wctx 的值并对其进行重定向,而无需任何其他处理。这让事情变得简单。
关于asp.net-mvc-3 - Azure ACS + 表单值存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8280071/