c# - 获取 Request.Headers 值

标签 c# asp.net-mvc httpwebrequest http-headers namevaluecollection

我敢肯定,这非常简单,但让我难以自拔!我在我的 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/

相关文章:

c# - 功能区控件专注于按钮单击

c# - 网络中主机 IP 范围

c# - IValidatableObject Validate 方法运行两次

c#-4.0 - C#HttpWebRequest忽略HTTP 500错误

c# - 获取机器 SID(包括主域 Controller )

c# - Global.asax 中 FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters) 的目的是什么

asp.net-mvc - 如何将整数返回到 ASP.NET MVC 中的 View ?

c# - 如何解决 "The operation has timed out"错误

c# - 如何将 cookie 传递给 HtmlAgilityPack 或 WebClient?

c# - 有没有一种方法可以在不编写一长串 OR 运算符的情况下根据字符串列表检查字符?