2008-11-01 2 views
23

Есть ли у кого-нибудь предложения (или регулярные выражения) для разбора заголовка HTTP Accept?Parse Accept Header

Я пытаюсь выполнить некоторое согласование типа контента в ASP.NET MVC. Кажется, что нет встроенного способа (это хорошо, потому что здесь много идей мысли), но разбор не является тривиальным, и я бы предпочел не изобретать колесо, если кто-то уже сделал это это хорошо и хочет поделиться.

+0

Хороший вопрос - я ищу это и в другом проекте! – 2008-11-01 04:00:48

ответ

9

Вы видели this article? Он дает довольно полную реализацию для анализа заголовка Accept и последующего использования с ним чего-то полезного.

0

RFC довольно сложный. Если регулярное выражение, где следовать этим правилам в письме, это будет несколько строк.

Если у вас уже есть Accept-заголовок, и игнорировать котировки и параметры, вы могли бы сделать что-то вроде этого, чтобы соответствовать каждой пары:

/([^()<>@,;:\\"\/[\]?={} \t]+)\/([^()<>@,;:\\"\/[\]?={} \t]+)/ 

* входит в класс символов, так что это делает не требуется никакого специального случая в регулярном выражении.

3

У меня written a parser в PHP. Это не сложно, но он даст вам массив типов mime в порядке предпочтения.

+0

связанный сайт отключен – MageWind 2015-02-04 18:30:18

0

с .NET 4.5 (я думаю, Microsoft сделала информацию о каркасных версиях < 4,5 довольно неясные в эти дни), вы можете использовать one of the the built in parsers из System.Net.Http.Headers:

public IOrderedEnumerable<MediaTypeWithQualityHeaderValue> GetMediaTypes(string headerValue) => 
    headerValue?.Split(',') 
     .Select(MediaTypeWithQualityHeaderValue.Parse) 
     .OrderByDescending(mt => mt.Quality.GetValueOrDefault(1)); 

Затем вы можете сделать что-то вроде этого:

var headerValue = "application/json, text/javascript, */*; q=0.01"; 
var mediaTypes = GetMediaTypes(headerValue); 

Давать вам хороший список всех типов носителей, где предпочтительных варианта является первым элементом. Вот LINQPad Dump из mediaTypes результата из примера:

LINQPad dump of results

Hat наконечник для this answer, для получения меня на верном пути.