if (Request.Headers["XYZComponent"].Count() > 0)
... wird versucht, die Anzahl der Zeichen in der zurückgegebenen Zeichenfolge zu zählen, aber wenn der Header nicht existiert es NULL zurück, Daher wirft es eine Ausnahme auf. Ihr zweites Beispiel effektiv macht das gleiche, es wird durch die Sammlung von Headern suchen und NULL zurück, wenn es nicht vorhanden ist, die Sie dann auf die Anzahl der Zeichen zu zählen versuchen:
Verwenden Sie stattdessen:
if(Request.Headers["XYZComponent"] != null)
oder wenn Sie leere oder leere Zeichenfolgen behandeln wollen als nicht gesetzt, dann verwenden:
if((Request.Headers["XYZComponent"] ?? "").Trim().Length > 0)
Die Null Coalesce Operator ?? Gibt eine leere Zeichenfolge zurück, wenn die Kopfzeile den Wert null hat, wodurch die Ausgabe einer NullReferenceException beendet wird.
wird eine Variation des zweiten Versuch auch arbeiten:
if (Request.Headers.AllKeys.Any(k => string.Equals(k, "XYZComponent")))
Edit: Es Sie explizit für den Wert Überprüfung wahr war nicht klar waren:
bool isSet = Boolean.TryParse(Request.Headers["XYZComponent"], out isSet) && isSet;
Gibt false zurück, wenn der Header-Wert false ist oder wenn Header nicht festgelegt wurde oder wenn Header einen anderen Wert als richtig oder falsch. Will return true ist der Header-Wert die Zeichenfolge ‚true‘ ist
Ich weiß nicht, ob MVC umschließt die Funktionalität, aber in HTTP selbst haben Header die Form "XYZComponent: true". Ich wüsste nur, wenn Sie es geschafft haben, einen Header wie "XYZComponent = true:" zu setzen (dh die ganze Zeichenfolge, die Sie angegeben haben, ist der Name und somit das, wonach Sie suchen sollten. Sollte leicht zu überprüfen sein, da Sie bereits wissen wie um durch die Schlüssel zu iterieren ... – Chris