我敢肯定,这非常简单,但让我难以自拔!我在我的 Web 应用程序中使用了一个组件,该组件在 Web 请求期间通过添加 header “XYZComponent=true”来标识自己 - 我遇到的问题是,您如何在您的 View 中检查它?
以下将不起作用:
if (Request.Headers["XYZComponent"].Count() > 0)
也不是这个:
if (Request.Headers.AllKeys.Where(k => k == "XYZComponent").Count() > 0)
如果没有设置 header 变量,两者都会抛出异常。任何帮助将不胜感激。
最佳答案
if (Request.Headers["XYZComponent"].Count() > 0)
... 将尝试计算返回字符串中的字符数,但如果 header 不存在,它将返回 NULL,这就是它抛出异常的原因。你的第二个例子有效地做了同样的事情,它将搜索 Headers 的集合并返回 NULL 如果它不存在,然后你尝试计算字符数:
改用这个:
if(Request.Headers["XYZComponent"] != null)
或者,如果您想将空白或空字符串视为未设置,则使用:
if((Request.Headers["XYZComponent"] ?? "").Trim().Length > 0)
Null Coalesce 运算符 ??如果 header 为空,将返回一个空字符串,并停止抛出 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'
关于c# - 获取 Request.Headers 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3530041/