if (Request.Headers["XYZComponent"].Count() > 0)
... будет пытаться подсчитать количество символов в возвращаемой строке, но если заголовок не существует, он вернет NULL, поэтому и вызывает исключение. Ваш второй пример, по сути, делает то же самое, он будет искать в коллекции заголовков и возвращает NULL, если он не существует, а затем вы попытаетесь посчитать количество символов:
Используйте это вместо:
if(Request.Headers["XYZComponent"] != null)
Или, если вы хотите обрабатывать пустые или пустые строки как не заданные, используйте:
if((Request.Headers["XYZComponent"] ?? "").Trim().Length > 0)
Нулевой оператор Coalesce ?? вернет пустую строку, если заголовок будет нулевым, и остановит его, выдав исключение NullReferenceException.
Вариант вашей второй попытки также будет работать:
if (Request.Headers.AllKeys.Any(k => string.Equals(k, "XYZComponent")))
Редактировать: Извините, не понял, что вы явно проверяли значение true :
bool isSet = Boolean.TryParse(Request.Headers["XYZComponent"], out isSet) && isSet;
Возвращает false, если значение Header равно false, или если заголовок не был установлен или если Header имеет любое другое значение, отличное от true или false. Вернет true, если значение Header является строкой 'true'