首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >.NET HttpSessionState案例不敏感

.NET HttpSessionState案例不敏感
EN

Stack Overflow用户
提问于 2009-11-13 19:20:15
回答 2查看 6.1K关注 0票数 21

.NET的HttpSessionState使用"InProc“存储似乎将会话变量键值视为不区分大小写。例如:

代码语言:javascript
运行
复制
session["foo"] = 1;
session["Foo"] = 2;
Trace.Write(session["foo"].ToString()); // => 2

这种行为似乎没有文档化,所以我想知道它只是底层会话存储机制的一个副作用,还是由类本身有意实现的。由于C#将其他一切都视为区分大小写的,因此会话不采用相同的方式有点令人不安。怎么回事?它有不同的商店类型吗?它是为了向后兼容VB吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-11-13 19:59:50

HttpSessionState的密钥不区分大小写,以匹配典型ASP会话对象的行为。这使得开发人员更容易将他们的ASP应用程序移植到ASP.NET,而无需引入微妙的区分大小写的问题。

对于QueryString、Cookies等对象和其他类似于经典ASP内置对象,也存在同样的不区分大小写的键行为。

当ASP.NET被设计的时候,我在微软的IIS中工作,ASP.NET努力使ASP.NET代码尽可能地向后兼容。这并不意味着ASP.NET具有完美的向后兼容性,但是每当做出决定(比如这个区分大小写的决定)时,默认的答案是匹配经典ASP行为,除非有充分的理由不这样做。

尽管如此,我同意会议的不敏感可以更好地记录下来。

顺便说一句,ASP.NET会话集合从NameObjectCollectionBase获取其案例行为,NameObjectCollectionBase是Cookies、会话状态、应用程序状态、标头等所有ASP.NET内置对象的基类。

该类的底层结构是哈希表。 每个元素都是一个键/值对。 NameObjectCollectionBase的容量是NameObjectCollectionBase可以容纳的元素数。当元素被添加到NameObjectCollectionBase中时,容量会根据需要通过重新分配自动增加。 哈希代码提供程序为NameObjectCollectionBase实例中的密钥分发散列代码。默认的哈希代码提供程序是CaseInsensitiveHashCodeProvider。 比较器确定两个键是否相等。默认比较器是CaseInsensitiveComparer。 在.NET框架版本1.0中,该类使用区分区域性的字符串比较.但是,在.NET框架1.1及更高版本中,该类在比较字符串时使用CultureInfo..::.InvariantCulture。有关区域性如何影响比较和排序的详细信息,请参阅比较和排序特定区域性的数据,比较和排序特定区域性的数据,以及执行区域性-不敏感的字符串操作。

一个合理的后续问题是:为什么经典的ASP是用不区分大小写的键来设计的?原因是,早在1996年(或左右),ASP所使用的主要语言是VBScript,因此满足VB开发人员对大小写不敏感的期望是有意义的。

票数 35
EN

Stack Overflow用户

发布于 2009-11-13 19:48:28

虽然C#是区分大小写的,但是ASP.NET中的这些构造是不区分大小写的,因为在HTML4中有很多是不区分大小写的(至少在HTML4中-- XHTML是区分大小写的,或者说是课程)。我相信这是在类本身中实现的。它是独立的,无论政府是在,还是在其他地方。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1731283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档