2010-06-18 77 views
1

我在我的MVC網站上使用表單身份驗證。我使用Visual Studio中的默認ASP.NET配置選項來管理用戶和角色。迄今爲止都很好。.NET MVC Forms身份驗證 - 調試IsInRole()?

我可以成功做Page.User.IsInRole("Moderator")查看。按預期返回True

調用Context.User.IsInRole("Moderator")裏面的時候的Global.asaxApplication_PostAuthenticateRequest()但是(在循環過程中或以後的事件,針對此事..)False返回。

Page.UserContext.User有什麼區別?我如何在Global.asax中獲得相同的(預期的)結果?

回答

1

在這個階段,上下文仍然可以在aspnet帳戶或運行應用程序池的帳戶下運行。您可能想要在Global.asax中創建一對(或全部)事件的情況下進行測試,並將Context.User.Name的結果打印到文本文件中。那麼也許你會看到名稱是否存在任何值。我所看到的是,如果該網站作爲aspnet帳戶運行,則該名稱將爲空。

您可能還想檢查與您的數據庫建立的連接,並在Context.User.IsInRole(「Moderator」)返回false期間查看誰試圖登錄數據庫。另外,(這是在黑暗中拍攝的),你可能想看看Thread.CurrentPrincipal.IsInRole(「Moderator」)給你什麼。我希望這些建議有助於調試。

+0

偉大的建議!我發現確實IsInRole()在'PostAuthenticateRequest'中返回不同的結果,然後它在'AuthorizeRequest'中(authorizerequest似乎給出了正確的(預期的)結果)。 – Ropstah 2010-06-25 11:40:47