Ali*_* R. 20 .net asp.net session-variables session-state case-sensitive
使用" InProc "存储的.NET的HttpSessionState似乎将会话变量键值视为不区分大小写.例如:
session["foo"] = 1;
session["Foo"] = 2;
Trace.Write(session["foo"].ToString()); // => 2
Run Code Online (Sandbox Code Playgroud)
这种行为似乎没有记录,所以我想知道它是否仅仅是底层会话存储机制的副作用,还是故意由类本身实现的.由于C#将其他所有内容视为区分大小写,因此会话以不同的方式行事会有点令人不安.是什么赋予了?商店类型有所不同吗?是否与VB向后兼容?
Jus*_*ant 34
HttpSessionState的键不区分大小写,以匹配传统ASP Session对象的行为.这使开发人员更容易将ASP应用程序移植到ASP.NET,而不会引入细微的区分大小写问题.
QueryString,Cookies等对象和其他类似于Classic-ASP的内置对象也具有相同的不区分大小写的行为.
在设计ASP.NET时,我在Microsoft的IIS团队中工作,并且ASP.NET努力使ASP.NET代码尽可能向后兼容ASP.这并不意味着ASP.NET具有完美的向后兼容性,但无论何时出现决策(如此区分大小写),默认答案是匹配经典ASP行为,除非有充分的理由不这样做.
也就是说,我同意Session的案例不敏感性可以更好地记录下来.
顺便说一下,ASP.NET Session集合从NameObjectCollectionBase获取它的大小写行为,它是Cookie,会话状态,应用程序状态,标题等所有ASP.NET内置对象的基类.来自docs:
此类的基础结构是哈希表.
每个元素都是键/值对.
NameObjectCollectionBase的容量是NameObjectCollectionBase可以容纳的元素数.当元素添加到NameObjectCollectionBase时,容量会根据需要通过重新分配自动增加.
哈希码提供程序为NameObjectCollectionBase实例中的键分配哈希码.默认的哈希码提供程序是CaseInsensitiveHashCodeProvider.
比较器确定两个键是否相等.默认比较器是CaseInsensitiveComparer.
在.NET Framework 1.0版中,此类使用区分文化的字符串比较.但是,在.NET Framework 1.1及更高版本中,此类在比较字符串时使用CultureInfo .. ::.InvariantCulture.有关文化如何影响比较和排序的更多信息,请参阅比较和排序特定文化的数据,比较和排序特定文化的数据以及执行不区分文化的字符串操作.
一个合理的后续问题是:为什么经典ASP使用不区分大小写的键设计?原因是,早在1996年(或其左右),ASP使用的主要语言是VBScript,因此有必要迎合VB开发人员对案例不敏感的期望.
| 归档时间: |
|
| 查看次数: |
5339 次 |
| 最近记录: |