Vous attendez-vous à ce que les noms de paramètres de chaîne de requête soient sensibles à la casse?

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

  •  03-07-2019
  •  | 
  •  

Question

Silverlight est sensible à la casse pour les paramètres de chaîne de requête. Le code suivant renvoie donc false avec "callid = 5"

.
string callId;
if (System.Windows.Browser.HtmlPage.Document.QueryString.TryGetValue("callId", out callId))
{
....
}

Microsoft défend sa décision en citant la spécification www.w3.org, mais je pense que cela aboutit à une expérience moins conviviale pour les personnes qui tentent d’être en contact avec vous ou de donner une URL par téléphone.

On dirait que Stackoverflow est insensible à la casse: https://stackoverflow.com/search?q=silverlight+bug https://stackoverflow.com/search?Q=silverlight+bug

Était-ce utile?

La solution

Je pense que vous devriez vous concentrer sur vos conventions de dénomination plutôt que sur les implémentations de normes, en veillant à éviter les noms de champs similaires et les cas mixtes. Par exemple, vous pouvez utiliser une convention de mots pouvant être lue au téléphone en déclarant "tout en minuscule". ou "tout en majuscule".

Autres conseils

J'ai fait ça. Je ne sais pas si ça aide.

var keyName = "";
if (!string.IsNullOrEmpty(keyName = someDictionary.SomeKeys.FirstOrDefault(k => k.ToLowerInvariant() == "size")))
{
    var someValue = someDictionary[keyName];
}

Oui, je suis habitué à ce qu’il soit sensible à la casse et par conséquent à le programmer depuis longtemps. Je connais des personnes qui ont implémenté des méthodes d'analyse intermédiaire pour les convertir en minuscules ou en serveur, et cela dépend vraiment de ce avec quoi vous travaillez.

En ce qui concerne la convivialité, oui, il est plus difficile à lire. MAIS, en même temps, une URL sur le téléphone qui a une chaîne de requête n’est pas facile à donner de toute façon.

Cette solution de contournement n'utilisera pas la puissance des dictionnaires, car elle parcourra toutes les clés, mais il s'agira probablement d'une solution de contournement suffisante pour la plupart des scénarios.

var keyName = HtmlPage.Document.QueryString.Keys.SingleOrDefault(key => key.Equals("callid", StringComparison.OrdinalIgnoreCase));

string callid;
HtmlPage.Document.QueryString.TryGetValue(keyName, out callid) 

Vous pouvez également transformer l'ensemble du dictionnaire QueryString en un nouveau dictionnaire avec un comparateur insensible à la casse si vous rencontrez de nombreuses recherches dans le dictionnaire.

var insensitiveQueryString = HtmlPage.Document.QueryString.ToDictionary(pair => pair.Key, pair => pair.Value, StringComparer.OrdinalIgnoreCase);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top