我希望能够检测用户何时使用被动 acs 登录我的应用程序,以便如果这是第一次使用我的应用程序,我可以将它们添加到我的数据库中。现在我正在订阅 WSFederationAuthenticationModule.SignedIn 但我觉得我错过了一些东西。主要是我不确定订阅该事件的最佳位置,我让它在 PostAuthenticateRequest 中工作,但它有点 hacky。有什么建议么?
此代码来自 global.asax
public override void Init()
{
base.Init();
PostAuthenticateRequest += (s, e) =>
{
try
{
FederatedAuthentication.WSFederationAuthenticationModule.SignedIn -= SignedIn;
}
finally
{
FederatedAuthentication.WSFederationAuthenticationModule.SignedIn += SignedIn;
}
};
}
private void SignedIn(object sender, EventArgs e)
{
//do something
}
编辑:
现在我将使用一个标志变量来确保我只订阅一次 SignedIn。除非有人有任何其他建议:) 感谢 Sandrino 的帮助。这是我目前所拥有的。
private static bool isFirstRequest = true;
public override void Init()
{
base.Init();
PostAuthenticateRequest += (s, e) => {
if (isFirstRequest)
{
FederatedAuthentication
.WSFederationAuthenticationModule.SignedIn += SignedIn;
isFirstRequest = false;
}
};
}
private void SignedIn(object sender, EventArgs e)
{
//do something
}
编辑: 更多信息。如果我使用的是 azure 模拟器,则会出现此问题,部署时也可能会出现此问题,但我没有尝试过。我已经测试了我是否无法通过尝试写入文本文件进行调试并且没有创建文本文件。