Ожидаете ли вы, что имена параметров строки запроса будут чувствительны к регистру?

StackOverflow https://stackoverflow.com/questions/808282

  •  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);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top