【问题标题】:How can I change the Comparer of ASP.NET's Request.Form collection?如何更改 ASP.NET 的 Request.Form 集合的比较器?
【发布时间】:2026-01-29 23:20:02
【问题描述】:

ASP.NET 的Request.Form["key"] 集合使用不区分大小写的比较器。这把我搞砸了,因为我的表单 POST 数据看起来像:

"subject=MySubjectLowerCase&Subject=MySubjectUpperCase"

因此,Request.Form["subject"](或Request.Form["Subject"])返回两个值:

MySubjectLowerCase,Subject=MySubjectUpperCase

但我想要的是我的特定键的单个值,区分大小写。

如何将比较器更改为区分大小写?

【问题讨论】:

  • 使用区分大小写的参数值是个坏主意。使用其他方法来区分它们。
  • tvanfosson - 我不控制帖子;它来自外部应用程序。

标签: asp.net .net collections icomparer


【解决方案1】:

Request.Form 是一个 NameValueCollection 对象。您将需要为它实现一个自定义的 IComparerInterface。你会发现这很有用: http://msdn.microsoft.com/en-us/library/system.collections.icomparer(v=vs.100).aspx

话虽如此,tvanfosson 说得对,实现区分大小写的参数值是个坏主意。

【讨论】:

  • 谢谢。我不控制帖子;它来自外部应用程序。
【解决方案2】:

您无法更改内置比较器。但是,如果您愿意解析原始实体主体,则可以通过 HttpRequest.InputStream、GetBufferlessInputStream 或 GetBufferedInputStream 访问它。前两个将使 Request.Form 无法访问;后者保留 Request.Form 以防另一部分请求管道依赖它。这应该仅作为最后的手段来完成,因为编写解析器可能是一个非常棘手的练习。

【讨论】: