繁体   English   中英

ASP.NET MVC:IPrincipal如何为null?

[英]ASP.NET MVC: How can IPrincipal be null?

我在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为null(我认为这在ASP.NET中永远不会为null)。

该错误仅发生在新构建的VM上。 代码在其他机器上很好,当然在本地开发时也是如此。

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

我建议,您的身份不是WindowsIdentity,因此案例将失败并导致null对象。 IIdenty可能是FormsIdentity,ClientFormsIdentity,GenericIdentity,PassportIdentity和WindowsIdentity,我想你应该试试


typeof(principal.Identity);

得到真正的。

我认为在上面的情况下,这是因为我们在IIS6中检查了Windows Auth和Anonymous。 这似乎造成了IIS有时会使用Windows Auth并因此创建IPrincipal的情况,但其他时候会使用匿名身份验证而不会创建IPrinciple。 当然关闭Anonymous Auth选项似乎已经解决了这个问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM