遇到的问题非常奇怪,总的现象就是程序在发布在服务器上运行时好好的,但在我本机上调试(代码一样的)就出问题了,登陆就出现
Server Error in '/rdnpi' Application.
--------------------------------------------------------------------------------Object reference not set to an instance of an object. 
代码出错在:NPI.Core.Domain.Users npiUser = Context.User as NPI.Core.Domain.Users;  
npiUser.CurrentGroup = Users.GetCurrentGroup(Convert.ToInt32(User.Identity.Name));一调试原来 npiUser 是null的,我想很可能是as转换不成功吧,但为什么在服务器上又是好的呢?这个跟系统平台有关吗?跟asp.net版本或是iis有关吗?
实在是不清楚,请大侠们指点一下啊

解决方案 »

  1.   

    补充一下,上面的代码实在
    if (Context.User.Identity.IsAuthenticated && Context.User != null)
                {}
    条件下的,而User.Identity.Name是相当于Context.User.Identity里面的,所以,我调试的时候是非空的
      

  2.   

    as的用法只能在引用类型使用。如果转换不成,将返回null值,不会报错
      

  3.   

    因为这出错句中引用到了npiUser.CurrentGroup 即转换过后的对象,而它又是空的,所以就报错啦,是这样的
      

  4.   

    是的,那么显然就是
     Context.User as NPI.Core.Domain.Users 转换不了了
      

  5.   

    没看完你的题。不好意思。as 会检查
    NPI.Core.Domain.Users和Context.User的兼容性
    如果不兼容就会返回null
    你强转一下 看报错不
    (NPI.Core.Domain.Users)Context.User
      

  6.   

    不好意思,现在才看到,我刚试过了,会报错:Unable to cast object of type 'System.Web.Security.RolePrincipal' to type 'NPI.Core.Domain.Users'. 
    因为它们里面的结构不一样,NPI.Croe.Domain.Uses里的属性要多些。
      

  7.   

    根据你的应用、web网站以及你的web配置的客户端端认证方式而定。比如使用匿名登录方式(其实大多数网站应用应该默认以这种方式),就没有。比如配置自动以客户端登录的各种方式(这至少有4、5种方式可以取得客户端的许多认证信息),甚至在客户端曾经第一次访问服务器的时候(当其它方式都无效时)弹出过windows登录窗口而输入了服务器的登录信息,并且被客户端浏览器所缓存了,在服务器端就有。我不知道你为什么要写Context.User这类代码。但是提醒你,你懂它的机制,才应该用它。不懂,就用你的应用程序自己的登录机制,而不要用它。