Как я могу изменить Сравнение коллекции Request.Form ASP.NET?

ASP.NET-х Request.Form["key"] коллекция использует регистр без учета регистра. Это меня облажает, потому что у меня есть данные формы POST, которые выглядят так:

"subject=MySubjectLowerCase&Subject=MySubjectUpperCase"

В следствии, Request.Form["subject"] (или же Request.Form["Subject"] в этом отношении) верните оба значения:

MySubjectLowerCase,Subject=MySubjectUpperCase

но то, что я хочу, - это единственное значение для моего конкретного ключа с учетом регистра.

Как я могу изменить Comparer на регистр?

2 ответа

Решение

Вы не можете изменить встроенный компаратор. Однако, если вы хотите проанализировать необработанное тело сущности, вы можете получить к нему доступ через HttpRequest.InputStream, GetBufferlessInputStream или GetBufferedInputStream. Первые два сделают Request.Form недоступным; последний сохраняет Request.Form на случай, если от него зависит другая часть конвейера запросов. Это следует делать только в крайнем случае, так как написание парсера может быть очень сложным занятием.

Request.Form является объектом NameValueCollection. Вам нужно будет реализовать настроенный интерфейс IComparerInterface для этого. Вы найдете это полезным: http://msdn.microsoft.com/en-us/library/system.collections.icomparer(v=vs.100).aspx

Сказав это, tvanfosson прав, что плохая идея реализовать значения параметров с учетом регистра.

Другие вопросы по тегам