时不时出现-object reference not set to an instance of an boject,

020job 2013-01-03 03:31:32
客户反映出现 object reference not set to an instance of an boject



我怀疑是的问题 session

我们网站有不少客户,这个问题偶尔会出现,大概1000个人有一个人会有这个问题吧,

是什么问题啊,
下面是cookiele和Session 的取值
public static int EnterpriseID()
{
HttpContext context = HttpContext.Current ;

HttpCookie cookie=context.Request.Cookies["CookieLe"];

if(cookie.Values["enterpriseID"]==null||cookie.Values["enterpriseID"]=="")
{
//return 0;
}
else
{
return int.Parse(jiemi_Des(cookie.Values["enterpriseID"]));
}

if (context.Session["enterpriseID"] == null || context.Session["enterpriseID"].ToString() == "")
{
//return 0;
}
else
{
return int.Parse(context.Session["enterpriseID"].ToString());
}
return 0;
}


就是这里偶尔会出错的。


public static bool EnterpriseAuthenticated()
{
HttpContext context = HttpContext.Current ;

if (context.Session["enterpriseID"] == null || context.Session["enterpriseID"].ToString() == "")
{
//return(false);
}
else
{
return (true);
}
if (context.Request.Cookies["CookieLe"] == null)
return false;

HttpCookie cookie=context.Request.Cookies["CookieLe"];

//string name=cookie.Values["name"];
//string age=cookie.Values["age"];

if(cookie.Values["enterpriseID"]==null||cookie.Values["enterpriseID"]=="")
{

}
else
{
int intmy = IsNumeric(cookie.Values["enterpriseID"]);
if (intmy > 0)
return false;
else
return true;

}



return false;
}



取值之前我都会判断的,也不知道为啥会出现那个错误。
...全文
1797 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
orain 2013-01-04
  • 打赏
  • 举报
回复
你并没有确认过 session 是否有效,我指的是 context.Session != null,在 ASP.NET 中,Session 常常会因为一些莫名其妙的原因丢失。
一一一一 2013-01-04
  • 打赏
  • 举报
回复
if (context.Session["enterpriseID"] == null || context.Session["enterpriseID"].ToString() == 不要直接.ToString()写个方法判断是不是为null 或者写个三元判断一下 if (context.Session["enterpriseID"] == null||(context.Session["enterpriseID"]==null?true:context.Session["enterpriseID"].ToString()==""))
020job 2013-01-04
  • 打赏
  • 举报
回复
引用 2 楼 sp1234 的回复:
哪一行出错? 如果连哪一行都不能指出来,你还要怎样来除错呢?所以最关键地是报告尽可能的详尽的异常信息,而不是像你这样(也许是根本没有在意过)把重要的错误行号等信息给剪切掉。 “取值之前我都会判断的”这通常并不能除错。就好像一个得了肺癌的人遇到问题就停止呼吸,这只能让问题爆发在后头,而不能除错。真正的除错态度就是尽早地重现bug,而且认真记录到底是哪一行、哪一个……
上面写的是这一行出错了, EnterpriseID(),111行么? 我们程序已经运行了好几年了,以前还真没有在意这个问题。
翔教授 2013-01-04
  • 打赏
  • 举报
回复
引用 楼主 020job 的回复:
客户反映出现 object reference not set to an instance of an boject context.Session["enterpriseID"] == null || context.Session["enterpriseID"].ToString() == ""
这样判断是有问题的,如果cookie.Values["enterpriseID"]==null,context.Session["enterpriseID"].ToString()就会出错
Assassin_ 2013-01-04
  • 打赏
  • 举报
回复
条件判断的地方不合理。 看看这个帖子。http://bbs.csdn.net/topics/80022010
020job 2013-01-04
  • 打赏
  • 举报
回复
引用 9 楼 loveASUS 的回复:
引用 6 楼 020job 的回复:引用 2 楼 sp1234 的回复:哪一行出错? 如果连哪一行都不能指出来,你还要怎样来除错呢?所以最关键地是报告尽可能的详尽的异常信息,而不是像你这样(也许是根本没有在意过)把重要的错误行号等信息给剪切掉。 “取值之前我都会判断的”这通常并不能除错。就好像一个得了肺癌的人遇到问题就停止呼吸,这只能让问题爆发在后头,而不能除……
解决了
简单Show 2013-01-04
  • 打赏
  • 举报
回复
不要用这种判断,用这种就OK,
string.isNullOrEmpty(cookie.Values["enterpriseID"])
loveASUS 2013-01-04
  • 打赏
  • 举报
回复
引用 6 楼 020job 的回复:
引用 2 楼 sp1234 的回复:哪一行出错? 如果连哪一行都不能指出来,你还要怎样来除错呢?所以最关键地是报告尽可能的详尽的异常信息,而不是像你这样(也许是根本没有在意过)把重要的错误行号等信息给剪切掉。 “取值之前我都会判断的”这通常并不能除错。就好像一个得了肺癌的人遇到问题就停止呼吸,这只能让问题爆发在后头,而不能除错。真正的除错态度就是尽早地重现bu……
if(cookie.Values["enterpriseID"]==null||cookie.Values["enterpriseID"]=="") { } else { int intmy = IsNumeric(cookie.Values["enterpriseID"]); if (intmy > 0) return false; else return true; } 应该这么写

  if(cookie.Values["enterpriseID"]!=null){
   if(cookie.Values["enterpriseID"]!=""){
      int intmy = IsNumeric(cookie.Values["enterpriseID"]);
      if (intmy > 0)
                    return false;
       else
                    return true;
   }
  }
天下如山 2013-01-04
  • 打赏
  • 举报
回复
嗯 这英文 很好懂 错就明白啦。
  • 打赏
  • 举报
回复
哪一行出错? 如果连哪一行都不能指出来,你还要怎样来除错呢?所以最关键地是报告尽可能的详尽的异常信息,而不是像你这样(也许是根本没有在意过)把重要的错误行号等信息给剪切掉。 “取值之前我都会判断的”这通常并不能除错。就好像一个得了肺癌的人遇到问题就停止呼吸,这只能让问题爆发在后头,而不能除错。真正的除错态度就是尽早地重现bug,而且认真记录到底是哪一行、哪一个变量是null,并找到其调用堆栈来分析为什么是null。 一旦除错的步骤做过几次,你就根本不需要写多余的“我都会判断null”这种东西了。反之,这就说明你根本没有经过高强度的测试就拿上去给用户凑合用了。
3610 2013-01-03
  • 打赏
  • 举报
回复
帮忙顶一下,有可能是补丁有问题啊
ASN.1是一种用于描述结构化客体的结构和内容的语言,基于编码规则BER(Basic Encoding Rules)是ASN.1标准定义的一种传送文法。每个MIB变量格式是SMI规定的,用ASN.1描述如下: OBJECTNAME BOJECT-TYPE DESCRIPTION:(description) SYNTAX: (syntax) ACCESS: (access) STATUS: (status) ::={(Parent)number} OBJECTNAME是被管对象的名字,ASN.1要求所有对象的名字在MIB中必须是唯一的;BOJECT-TYPE 是每一个节点对象所必需的关键字;SYNTAX是被管对象类型的关键字,随后跟着的是一个类型(syntax);ACCESS是被管对象的访问方式关键字,在 SNMP 第二版中为MAX-ACCESS 关键字,(access)是被管对象的访问方式,可为如下列举值之一: read-only、read-write、no-accessible, SNMP 第2 版中又增加了read-create;STATUS是被管对象关键字,(status)是被管对象的状态,如必备的、可选的或废弃的;DESCRIPTION是 对被管对象的功能、特征等进行描述的关键字,(description)是被管对象的文本描述,在:::={(Parent)number }中,Parent表示位于MIB树中的父节点,number表示是第几个子节点。 MIB 树 每个MIB对象都用对象标识符(OID)来唯一的标识,这是用定义在ASN.1语法中的树型结构来组织的可用信息,其中每个可用信息是一个带标号的节点,每个节点用数字和字符两种方式显示,其中对象标识符OID是由句点隔开的一组整数,也就是从根节点通向它的路径,它命名节点并指示它在ASN.1树中的准确位置。一个带标号节点可以拥有包含其它带标号节点为它的子树,如果没有子树它就是叶子节点,它包含一个值并被称为对象。图3是带有ASN.1编号的MIB树实例:可以看出MIB-Ⅱ的OID是:1.3.6.1.2.1或者iso.org.dod.internet.mgmt.mib2。在SNMP中,实现应用到的MIB对象都是MIB-Ⅱ的子树节点。

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧