21

我目前正在这样做,但如果找不到密钥,它会引发异常。

ActionFilterAttribute此代码段位于被覆盖方法中继承自的 Web api 过滤器内部OnActionExecuting

if (actionContext.Request.Headers.GetValues("some_key") != null 
                && actionContext.Request.Headers.GetValues("some_key").First() == "hello")
{

}

我是否被迫将其包装在 try/catch 中?

4

2 回答 2

43
class MyFilter : System.Web.Http.Filters.ActionFilterAttribute
{
    public override void OnActionExecuting(System.Web.Http.Controllers.HttpActionContext actionContext)
    {
        IEnumerable<string> values;
        if (actionContext.Request.Headers.TryGetValues("some_key", out values) && values.First() == "hello")
        {

        }
    }
}
于 2013-09-24T15:21:05.190 回答
4

自 C# 6.0 发布以来,这里是 Yuriy Faktorovich 的答案的替代语法,您将在一行中获得标头值或 null 作为结果。

actionContext.Request.Headers.SingleOrDefault(x => x.Key == "some_key").Value?.First()

于 2019-06-07T15:21:36.407 回答