3

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

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

4

4 回答 4

1

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

FormsAuthentication.SetAuthCookie(UserName, False)

或者

FormsAuthentication.RedirectFromLoginPage(UserName, False)

最好用 try catch 包裹起来。

于 2012-09-13T14:04:56.707 回答
0

Name是一个属性而不是方法,因此它的“getter”位极不可能抛出异常,因为它是一个 Microsoft 类,并且他们的框架设计指南明确警告不要从 getter 抛出异常。虽然这条规则在某处可能有一个例外......

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

于 2012-09-13T14:44:40.697 回答
0

User.Identity如果User当前的HttpContext. 虽然它User是空的,但不是Identity。所以是的,您应该以某种方式检查或处理 null 。

于 2012-09-13T14:29:04.600 回答
0

WhileName是一个字符串,Identity并且User是对象,当然可以像任何对象一样为 null。因此,总是有机会抛出异常,作为生产应用程序,您最好使用 try/catch 将其包装起来,并检查名称是否为 null

于 2012-09-13T14:32:48.700 回答