if (Request.Headers["XYZComponent"].Count() > 0)
... será tratado de contar el número de caracteres en la cadena devuelta, pero si la cabecera no existe devolverá NULL, de ahí por qué está lanzando una excepción. Su segundo ejemplo efectivamente hace lo mismo, se buscará a través de la colección de encabezados y devolver NULL si no existe, lo que a continuación, intenta contar el número de caracteres en:
Use este lugar:
if(Request.Headers["XYZComponent"] != null)
o si usted quiere tratar cadenas vacías o en blanco no establecidos a continuación, utilizar:
if((Request.Headers["XYZComponent"] ?? "").Trim().Length > 0)
El operador nulo Coalesce ?? devolverá una cadena en blanco si el encabezado es nulo, deteniéndolo arrojando una NullReferenceException.
una variación de su segundo intento también trabajará:
if (Request.Headers.AllKeys.Any(k => string.Equals(k, "XYZComponent")))
Editar: este momento no se dio cuenta que estaba mirando de forma explícita por el valor verdadero :
bool isSet = Boolean.TryParse(Request.Headers["XYZComponent"], out isSet) && isSet;
Devolverá falso si el valor de Encabezado es falso, o si el Encabezado no se ha configurado o si el Encabezado tiene otro valor que no sea verdadero o falso. Devolverá verdadero es el valor de encabezado es la cadena 'verdadera'
No sé si MVC envuelve la funcionalidad, pero en HTTP los encabezados tienen la forma "XYZComponent: true". Estoy pensando si has logrado establecer un encabezado como "XYZComponent = true:" (es decir, toda la cadena que citaste es el nombre y, por lo tanto, lo que debes verificar. Debería ser fácil de verificar ya que ya sabes cómo para iterar a través de las teclas ... – Chris