if (Request.Headers["XYZComponent"].Count() > 0)
... 将尝试计算返回字符串中的字符数,但如果标头不存在,它将返回 NULL,因此它会引发异常。您的第二个示例有效地执行了相同的操作,它将搜索 Headers 的集合,如果它不存在则返回 NULL,然后您尝试计算其上的字符数:
改用这个:
if(Request.Headers["XYZComponent"] != null)
或者,如果您想将空白或空字符串视为未设置,请使用:
if((Request.Headers["XYZComponent"] ?? "").Trim().Length > 0)
空合并运算符 ?? 如果标头为空,将返回一个空白字符串,停止它抛出 NullReferenceException。
您的第二次尝试的变体也将起作用:
if (Request.Headers.AllKeys.Any(k => string.Equals(k, "XYZComponent")))
编辑:抱歉没有意识到您正在明确检查值true:
bool isSet = Boolean.TryParse(Request.Headers["XYZComponent"], out isSet) && isSet;
如果 Header 值为 false,或者没有设置 Header,或者 Header 是除 true 或 false 之外的任何其他值,则将返回 false。将返回 true 是 Header 值是字符串 'true'