3

我注意到User.Identity.Name似乎在沒有用戶身份驗證時返回空字符串,而不是拋出空引用異常。User.Identity.Name曾經拋出?

假設User.Identity.Name永遠不會扔?或者我應該在訪問之前檢查null Identity

回答

1

我認爲,用戶對象可以爲空,如果你還沒有叫

FormsAuthentication.SetAuthCookie(UserName, False) 

FormsAuthentication.RedirectFromLoginPage(UserName, False) 

它可能是最好的嘗試捕捉包。

+0

總是檢查!我的大多數應用程序都是具有Windows認證的內部網,所以很容易出錯,因爲這意味着應用程序設置正確 – ggonsalv

0

User.Identity如果在當前的HttpContext中沒有User,則會拋出空引用異常。雖然它是User是空的,而不是Identity。所以是的,你應該以某種方式檢查或處理null。

0

雖然Name是一個字符串,IdentityUser是對象,當然可以爲空,因爲任何對象都可以。 因此,總是有拋出異常的機會,並且作爲生產應用程序,您更好地使用try/catch包裝它以及檢查Name爲空。

0

Name是屬性而不是方法,因此它的「getter」位不太可能拋出異常,因爲它是Microsoft類,並且它們的framework design guidelines明確警告不要從getter拋出異常。雖然這個規則在某處可能是個例外......

此外,我通常使用元數據作爲指導,指出如果通過方法(對於.Net框架類)拋出任何異常。在Visual Studio中打開F12(如果您還沒有安裝Reflector或類似軟件)會顯示元數據。在方法上方的註釋塊中,它通常會給出方法可能拋出的確切類型的異常。