Ожидаете ли вы, что имена параметров строки запроса будут чувствительны к регистру?
-
03-07-2019 - |
Вопрос
Silverlight чувствителен к регистру параметров строки запроса, поэтому следующий код вернет false с «callid=5».
string callId;
if (System.Windows.Browser.HtmlPage.Document.QueryString.TryGetValue("callId", out callId))
{
....
}
Microsoft защищает свое решение, ссылаясь на спецификацию www.w3.org, но я думаю, что это приводит к менее дружелюбному взаимодействию с людьми, пытающимися связаться с вами или дать URL-адрес по телефону.
Похоже, Stackoverflow нечувствителен к регистру:https://stackoverflow.com/search?q=silverlight+bug https://stackoverflow.com/search?Q=silverlight+bug
Решение
Я думаю, вам следует сосредоточиться на соглашениях об именах, а не на реализации стандартов, стараясь избегать одинаковых имен полей и смешанного регистра.Например, вы можете использовать условный порядок слов, который можно прочитать по телефону, с указанием «все строчные буквы» или «все строчные буквы».
Другие советы
Я сделал это.Не знаю, поможет ли это.
var keyName = "";
if (!string.IsNullOrEmpty(keyName = someDictionary.SomeKeys.FirstOrDefault(k => k.ToLowerInvariant() == "size")))
{
var someValue = someDictionary[keyName];
}
Да, я привык к тому, что он чувствителен к регистру, и поэтому уже давно программирую его.Я знаю некоторых людей, которые реализовали методы промежуточного анализа для преобразования их всех в нижний регистр или других вещей на стороне сервера, и это действительно зависит от того, с чем конкретно вы работаете.
Что касается удобства использования, да, это сложнее читать.НО, в то же время URL-адрес по телефону, имеющий строку запроса, в любом случае нелегко выдать.
Этот обходной путь не будет использовать возможности словарей, поскольку он будет перебирать все ключи, но, вероятно, будет достаточным обходным путем для большинства сценариев.
var keyName = HtmlPage.Document.QueryString.Keys.SingleOrDefault(key => key.Equals("callid", StringComparison.OrdinalIgnoreCase));
string callid;
HtmlPage.Document.QueryString.TryGetValue(keyName, out callid)
Вы также можете преобразовать весь словарь QueryString в новый словарь с помощью компаратора, нечувствительного к регистру, если у вас много поисков по словарю.
var insensitiveQueryString = HtmlPage.Document.QueryString.ToDictionary(pair => pair.Key, pair => pair.Value, StringComparer.OrdinalIgnoreCase);