Asp.net User.Identity.Name是否抛出过?

Asp.net User.Identity.Name是否抛出过?,asp.net,asp.net-mvc,forms-authentication,defensive-programming,Asp.net,Asp.net Mvc,Forms Authentication,Defensive Programming,我注意到,User.Identity.Name在没有经过用户身份验证的情况下返回空字符串,而不是抛出空引用异常 假设User.Identity.Name永远不会抛出是有效的吗?或者我应该在访问之前检查nullIdentity 我相信如果您没有调用,User对象可以为null FormsAuthentication.SetAuthCookie(UserName, False) 或 最好是用一个试捕包起来 User.Identity如果当前HttpContext中没有User,将抛出空引用异常。虽

我注意到,
User.Identity.Name
在没有经过用户身份验证的情况下返回空字符串,而不是抛出空引用异常


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

我相信如果您没有调用,User对象可以为null

FormsAuthentication.SetAuthCookie(UserName, False)


最好是用一个试捕包起来

User.Identity
如果当前
HttpContext
中没有
User
,将抛出空引用异常。虽然是
User
为空,但不是
Identity
。因此,是的,您应该以某种方式检查或处理空值。

虽然
Name
是字符串,
Identity
User
是对象,它们当然可以像任何对象一样为空。
因此,总是有可能引发异常,作为一个生产应用程序,您最好通过try/catch将其包装,并检查名称是否为null

Name
是一个属性,而不是一个方法,因此它的“getter”部分极不可能引发异常,因为它是一个Microsoft类,并且它们明确警告不要从getter抛出异常。虽然这条规则可能有个例外


此外,我通常使用元数据作为指导,以了解如果某个方法(对于.Net framework类)引发了任何异常,会发生什么。在VisualStudio中点击F12(如果您没有安装Reflector或类似的东西)将显示元数据。在方法上方的注释块中,它通常为您提供该方法可能引发的异常的确切类型。

始终检查!我的大多数应用程序都是带有windows Authentication的intranet,因此最好出现错误,因为这意味着应用程序设置正确
FormsAuthentication.RedirectFromLoginPage(UserName, False)