2010-06-18 19 views

回答

18

您無權訪問用戶對象,因爲該請求尚未通過身份驗證。

嘗試使用Application_AuthenticateRequest代替。

這裏是所有的Global.asax事件的解釋: https://web.archive.org/web/1/http://articles.techrepublic%2ecom%2ecom/5100-10878_11-5771721.html

和應用程序生命週期的MSDN演練: http://msdn.microsoft.com/en-us/library/ms178473.aspx

編輯: 我看到你在做什麼。改變你的if語句,如果沒有聲明(如果對不起語法錯了,我不使用VB.NET):

Sub Application_AuthenticateRequest() 
    If Context.User <> Nothing Then 
     Throw New Exception("User now exists") 
End Sub 

你會發現,這種方法被擊中一次以上。直到第二次或第三次纔會拋出異常。這是因爲每個請求都遵循應用程序生命週期。因此,當用戶爲空時,不應執行任何操作,而應在用戶不爲空時執行該操作。

如果你的目標是動態地限制訪問,您應該創建一個單獨的HttpModule,並將其分配給你限制

但是這些文件,你需要小心,不要進行重寫整個ASP.NET應用安全基礎結構。相反,您可以根據角色限制對某些文件夾的訪問。

+0

請檢查我的意見在其他答案由Julien ... http://stackoverflow.com/questions/3072768/net-application-beginrequest-how-to-get-user-reference/3072801#3072801 – Ropstah 2010-06-18 20:56:07

+0

ropstah:我現在看到發生了什麼事。應用程序在處理認證請求之前發出多個請求(可能用於圖像,腳本,樣式表等)。那些其他的文件請求可能不需要認證,這就是爲什麼你的異常被拋出。嘗試在我的答案更新,看看是否澄清。另外,你想用你需要User對象的代碼來實現什麼? – 2010-06-19 01:14:44

+0

事實並非如此,但它與** Global.asax生命週期有關。我需要''User.IsInRole()'功能,它僅在** _Application_AuthenticateRequest_之後可用**,即在Application_AuthorizeRequest() – Ropstah 2010-06-22 11:58:50

8

不,您必須改用Application_AuthenticateRequest。這是您擁有用戶的最早階段。

+0

這拋出一個異常,仍然沒有用戶或什麼? Sub Application_AuthenticateRequest() 如果Context.User沒有那麼拋出新的異常(「沒有用戶」) End Sub – Ropstah 2010-06-18 20:45:22