Как безопасно получить доступ к actionContext.Request.Headers.GetValues, если ключ не найден?

В настоящее время я делаю это, но он генерирует исключение, если ключ не найден.

Этот фрагмент находится внутри фильтра веб-api, который наследует от ActionFilterAttribute, в методе overriden OnActionExecuting.

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

}

Я вынужден обернуть это в try/catch?

Ответы

Ответ 1

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")
        {

        }
    }
}

Ответ 2

Начиная с выпуска С# 6.0, здесь есть альтернативный синтаксис ответа Юрия Факторовича, где вы получите значение заголовка или ноль в результате в одной строке.

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