User.Identity.Name会抛出吗?

时间:2012-09-13 13:56:52

标签: asp.net asp.net-mvc forms-authentication defensive-programming

我注意到User.Identity.Name似乎在没有用户身份验证时返回空字符串,而不是抛出空引用异常。

假设User.Identity.Name永远不会抛出是有效的吗?或者我应该在访问之前检查null Identity

4 个答案:

答案 0 :(得分:1)

我相信如果你没有调用

,User对象可以为null
FormsAuthentication.SetAuthCookie(UserName, False)

FormsAuthentication.RedirectFromLoginPage(UserName, False)

最好包装一个try catch。

答案 1 :(得分:0)

如果当前User.Identity中没有User

HttpContext将抛出空引用异常。虽然UserIdentity,但不是{{1}}。所以是的,你应该以某种方式检查或处理null。

答案 2 :(得分:0)

虽然Name是一个字符串,IdentityUser是对象,但任何对象都可以为null。 因此,总是有机会抛出异常,作为生产应用程序,你最好通过try / catch包装它,并检查Name为null

答案 3 :(得分:0)

Name是一个属性,而不是一个方法,因此它的“getter”位极不可能抛出异常,因为它是一个Microsoft类,并且他们的framework design guidelines明确警告不要抛出来自getters的例外。虽然这个规则可能有例外......

此外,我通常使用元数据作为指导,如果方法抛出任何异常(对于.Net框架类)。在Visual Studio中使用F12(如果没有安装Reflector或类似的东西)将显示元数据。在方法上方的注释块中,它通常会为您提供该方法可能引发的确切异常类型。