我正在IIS6 / Server 2003上运行一个网站,该网站在本地Intranet上使用集成Windows身份验证。我可以浏览到该站点,但是在调用以下C#代码(每次请求均被调用)时出现间歇性的“ Object null”错误:

....
GetUserIdFromPrincipal(User)
....

public static string GetUserIdFromPrincipal(IPrincipal principal) {
     return principal.Identity is WindowsIdentity ? (principal.Identity as WindowsIdentity).User.Value : principal.Identity.Name;
}


因此,由于该错误是间歇性的,因此Windows Auth可以在某种程度上正常工作,但是在该站点上浏览了几次单击后,我得到了空引用错误,这意味着IPrincipal为空(我认为在ASP.NET中该值永远不应该为空)。

该错误仅在新建的VM上发生。该代码在其他计算机上以及在本地开发时也可以使用。

IIS是否在每个请求中都请求Windows Auth详细信息?是什么原因导致这种间歇性问题?任何帮助或建议,将不胜感激。

最佳答案

我建议,您的身份完全不是WindowsIdentity,因此该案例将失败并偏向空对象。 IIdenty可能是FormsIdentity,ClientFormsIdentity,GenericIdentity,PassportIdentity和WindowsIdentity,我想您应该尝试

typeof(principal.Identity);


得到真正的。

10-08 14:04