Получить строго типизированный класс заголовка в ASP.NET Core

Как получить строго типизированный класс заголовка из пространства имен System.Net.Http.Headers от контроллера ASP.NET Core? В контроллере, производном от Controller, доступен Request.Headers, но он просто возвращает IHeaderDictionary. Существует также метод расширения HeaderDictionaryTypeExtensions.GetTypedHeaders, но он возвращает RequestHeaders, который имеет только определенные заголовки. Класс HttpRequestHeaders имеет наиболее полный список заголовков, но неясно, как получить к нему доступ.

Например, как получить AuthenticationHeaderValue? Один из вариантов - AuthenticationHeaderValue.Parse(Request.Headers["Authorization"]), но он требует жесткого кодирования имени заголовка. Возможно, есть способ добраться до HttpRequestHeaders.Authorization не жестко.


person Edward Brey    schedule 04.10.2016    source источник
comment
Возможный дубликат http://stackoverflow.com/questions/29706719/where-all-types-for-http-headers-gone-in-asp-net-5   -  person Tseng    schedule 06.10.2016
comment
@Tseng На этот другой вопрос есть принятый ответ, основанный на RequestHeaders, который полезен для некоторых заголовков, но не подходит для других. В этом вопросе основное внимание уделяется тому, как получить более полный HttpRequestHeaders доступ в ASP.NET Core 1.0.   -  person Edward Brey    schedule 07.10.2016
comment
Я разместил этот вопрос как проблему в проекте GitHub.   -  person Edward Brey    schedule 12.01.2017


Ответы (1)


Используйте AuthenticationHeaderValue, чтобы преобразовать строку заголовка в объект со свойствами Scheme и Parameter.

var auth = AuthenticationHeaderValue.Parse(Request.Headers[HeaderNames.Authorization]);

if (auth.Scheme != expectedScheme || !MyVerifyAuthParamteter(auth.Parameter)) ...
person Edward Brey    schedule 18.01.2017