【问题标题】:Unable to check null for header value in request无法检查请求中标头值的 null
【发布时间】:2016-02-17 09:31:32
【问题描述】:

我试图获取如下所示的标头值 -

IEnumerable<string> headerValues = request.Headers.GetValues("MyCustomerId");
var id = headerValues.FirstOrDefault();

如果标头值为 null 或不存在,则会引发错误 - InvalidOperationException

GetValues 的 null 检查不提供任何值,因为它永远不会返回 null。如果标头不存在,您将收到 InvalidOperationException

有什么诀窍吗?

【问题讨论】:

  • request.Headers?.GetValues("MyCustomerId");
  • 尝试 catch 不是一个好的选择,它会破坏我的代码我需要在 if else 中使用它
  • 您可以使用? 或检查.Headers.HasKeys() 是否返回true。

标签: c# asp.net-web-api httprequest


【解决方案1】:

您可以像这样检查 null:

 if(System.Web.HttpContext.Current.Request.Headers["MyCustomerId"] != null)
   {
      // do something
   }

久经考验

【讨论】:

  • 名称Request在当前上下文中不存在
【解决方案2】:

request.HeadersSystem.Net.Http.HttpHeaders 的一个实例(通过HttpRequestHeaders 子类)。它有一个方法TryGetValues,可用于安全地检索标头的值。

String header = null;
IEnumerable<String> headerValues;
if( this.Request.Headers.TryGetValues("HeaderName", out headerValues) ) {
    header = headerValues.First();
}

【讨论】:

  • 名称Request在当前上下文中不存在
  • @Neo 您的代码从哪里获取request 变量?我的代码假定它位于 ApiController 子类的实例方法中。
  • 请求变量.from.requestmessage ...ur.code.also.works.fine.thanks
  • HttpHeaders 也有一个 Contains 测试。
【解决方案3】:

您可以使用Headers.Contains() 来测试任何标头是否存在。
请参阅this answer 中的示例。

【讨论】:

    猜你喜欢
    • 2015-05-16
    • 1970-01-01
    • 2015-01-23
    • 2022-01-21
    • 1970-01-01
    • 2012-10-01
    • 1970-01-01
    • 2021-04-10
    • 2022-12-29
    相关资源
    最近更新 更多