Как безопасно получить доступ к 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()