Asp.net 如何将值从AD FS 2.0 HomeRealmDiscovery.aspx传递到FormsSignIn.aspx?

Asp.net 如何将值从AD FS 2.0 HomeRealmDiscovery.aspx传递到FormsSignIn.aspx?,asp.net,asp.net-2.0,adfs2.0,adfs,Asp.net,Asp.net 2.0,Adfs2.0,Adfs,AD FS 2.0登录页面是一个小型ASP.NET web应用程序(使用.NET 2.0),可以对其进行自定义以更改外观和功能。(此类定制由Microsoft明确记录:请参阅及其子页面。) 我有一个场景,其中存在多个“家庭领域”(=“索赔提供者信任”),并且AD FS 2.0使用表单登录(而不是另一个) 当页面被点击时,该页面应该以某种方式(例如,通过询问用户)选择一个主域,然后调用。这通常是在某些ASP.NET事件处理程序中为某些提交按钮完成的。此时,控制权将转移到页面 现在在FormsSig

AD FS 2.0登录页面是一个小型ASP.NET web应用程序(使用.NET 2.0),可以对其进行自定义以更改外观和功能。(此类定制由Microsoft明确记录:请参阅及其子页面。)

我有一个场景,其中存在多个“家庭领域”(=“索赔提供者信任”),并且AD FS 2.0使用表单登录(而不是另一个)

当页面被点击时,该页面应该以某种方式(例如,通过询问用户)选择一个主域,然后调用。这通常是在某些ASP.NET事件处理程序中为某些提交按钮完成的。此时,控制权将转移到页面

现在在FormsSignIn页面上,我想使用一些在HomeRealmDiscovery页面上输入的数据(与AD FS不直接相关)。然而,我认为没有办法获得这些数据

MSDN页面解释了如何找出控制权是如何转移的。在我的例子中,我发现在FormsSignIn页面中,
IsPostBack
为false,
PreviousPage
为null,
IsCallback
为false。(另外,
IsCrossPagePostBack
为false。)因此,MSDN页面建议使用“原始请求”调用FormsSignIn页面。但事实并非如此,因为我观察到(使用例如Fiddler),控制权不会通过以任何方式重定向客户端浏览器来转移。因此,我希望这是一个“服务器传输”,这样我就可以使用
PreviousPage
访问HomeRealmDiscovery页面实例。(我尝试使用cookie,但由于浏览器未参与传输,因此无法使用cookie。)


因此,我的问题是:如何将值从AD FS 2.0 HomeRealmDiscovery.aspx页面传递到其FormsSignIn.aspx页面?

AD FS对HTTP请求进行了一些操作,因此我找到的最佳选择是使用HttpContext项集合共享数据

因此,在HomeRealmDiscovery页面中,将值设置为:

var context = HttpContext.Current;

string someValue = "someValue";
ComplexObject someOtherValue = new ComplexObject();

context.Items.Add("key", someValue);
context.Items.Add("key2", someOtherValue);
var context = HttpContext.Current;

var value = context.Items["key"] as string;
var otherValue = context.Items["key2"] as ComplexObject;
然后在FormsLoginPage中,使用以下内容获取值:

var context = HttpContext.Current;

string someValue = "someValue";
ComplexObject someOtherValue = new ComplexObject();

context.Items.Add("key", someValue);
context.Items.Add("key2", someOtherValue);
var context = HttpContext.Current;

var value = context.Items["key"] as string;
var otherValue = context.Items["key2"] as ComplexObject;
希望这有帮助