.NET MVC表单身份验证-调试IsInRole()?
我正在MVC网站上使用表单身份验证。我使用Visual Studio中的默认ASP.NET配置选项管理用户和角色。到目前为止一切都很好 我可以在视图中成功地执行.NET MVC表单身份验证-调试IsInRole()?,.net,forms-authentication,global-asax,.net,Forms Authentication,Global Asax,我正在MVC网站上使用表单身份验证。我使用Visual Studio中的默认ASP.NET配置选项管理用户和角色。到目前为止一切都很好 我可以在视图中成功地执行Page.User.IsInRole(“主持人”)True按预期返回 但是,在调用Context.User.IsInRole(“主持人”)的Global.asax应用程序\u PostAuthenticateRequest()(或者循环中的任何后续事件)时,将返回False 页面用户和上下文用户之间有什么区别?如何在Global.asax
Page.User.IsInRole(“主持人”)
True
按预期返回
但是,在调用Context.User.IsInRole(“主持人”)
的Global.asax应用程序\u PostAuthenticateRequest()
(或者循环中的任何后续事件)时,将返回False
页面用户和上下文用户之间有什么区别?如何在Global.asax中获得相同的(预期的)结果?在这个阶段,上下文可能仍然在aspnet帐户或运行应用程序池的帐户下运行。您可能希望执行一个测试,在该测试中创建Global.asax中可用的两个(或全部)事件,并将Context.User.Name的结果打印到文本文件中。然后,您可能会看到名称是否存在任何值。我所看到的是,当站点以aspnet帐户运行时,名称将为空 您可能还希望检查与数据库的连接,并查看在Context.User.IsInRole(“版主”)返回false时,谁正在尝试登录数据库
另外,(这是在黑暗中拍摄的),您可能想看看Thread.CurrentPrincipal.IsInRole(“主持人”)给了您什么。我希望这些建议将有助于调试。在这一阶段,上下文可能仍在aspnet帐户或运行应用程序池的帐户下运行。您可能希望执行一个测试,在该测试中创建Global.asax中可用的两个(或全部)事件,并将Context.User.Name的结果打印到文本文件中。然后,您可能会看到名称是否存在任何值。我所看到的是,当站点以aspnet帐户运行时,名称将为空 您可能还希望检查与数据库的连接,并查看在Context.User.IsInRole(“版主”)返回false时,谁正在尝试登录数据库
另外,(这是在黑暗中拍摄的),您可能想看看Thread.CurrentPrincipal.IsInRole(“主持人”)给了您什么。我希望这些建议将有助于调试。非常好的建议!我发现IsInRole()确实在
PostAuthenticateRequest
中返回了不同的结果,然后在AuthorizeRequest
中返回了不同的结果(AuthorizeRequest似乎给出了正确的(预期的)结果)。很棒的建议!我发现IsInRole()确实在PostAuthenticateRequest
中返回了不同的结果,然后在AuthorizeRequest
中返回了不同的结果(AuthorizeRequest似乎给出了正确的(预期的)结果)。