gpt4 book ai didi

.NET HttpSessionState 不区分大小写

转载 作者:行者123 更新时间:2023-12-01 19:23:10 24 4
gpt4 key购买 nike

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

session["foo"] = 1;
session["Foo"] = 2;
Trace.Write(session["foo"].ToString()); // => 2

这种行为似乎没有记录,所以我想知道它是否只是底层 session 存储机制的副作用,或者是类本身有意实现的。由于 C# 将其他所有内容都视为区分大小写,因此 session 不以相同方式进行操作会有点令人不安。是什么赋予了?是否因商店类型而异?它是为了向后兼容 VB 吗?

最佳答案

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 获取其 case 行为它是 Cookie、 session 状态、应用程序状态、 header 等所有 ASP.NET 内置对象的基类。来自文档:

The underlying structure for this class is a hash table.

Each element is a key/value pair.

The capacity of a NameObjectCollectionBase is the number of elements the NameObjectCollectionBase can hold. As elements are added to a NameObjectCollectionBase, the capacity is automatically increased as required through reallocation.

The hash code provider dispenses hash codes for keys in the NameObjectCollectionBase instance. The default hash code provider is the CaseInsensitiveHashCodeProvider.

The comparer determines whether two keys are equal. The default comparer is the CaseInsensitiveComparer.

In .NET Framework version 1.0, this class uses culture-sensitive string comparisons. However, in .NET Framework version 1.1 and later, this class uses CultureInfo..::.InvariantCulture when comparing strings. For more information about how culture affects comparisons and sorting, see Comparing and Sorting Data for a Specific Culture Comparing and Sorting Data for a Specific Cultureand Performing Culture-Insensitive String Operations.

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

关于.NET HttpSessionState 不区分大小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1731283/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com