![](/img/trans.png)
[英]How can I make accessing my custom IPrincipal easier in ASP.NET MVC?
[英]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.