2008-11-01 9 views
23

Czy ktoś ma jakieś sugestie (lub wyrażenie regularne) do analizowania nagłówka HTTP Accept?Analizowanie składni nagłówka

Próbuję przeprowadzić negocjację typu zawartości w ASP.NET MVC. Wydaje się, że nie ma tu wbudowanego sposobu (co jest w porządku, ponieważ jest tu wiele szkół myśli), ale analiza nie jest całkowicie banalna i wolałbym nie wymyślać ponownie koła, jeśli ktoś już zrobił to dobrze i chce się dzielić.

+0

Dobre pytanie - szukam tego również w innym projekcie! –

Odpowiedz

9

Czy widziałeś this article? Daje całkiem obszerną implementację do parsowania nagłówka Accept, a następnie robienia z nim czegoś użytecznego.

0

Model RFC jest dość skomplikowany. Jeśli wyrażenie regularne, w którym zastosuje się te reguły do ​​litery, będzie miało kilka wierszy.

Jeśli masz już Accept-nagłówek, a ignorować cytaty i parametry, można zrobić coś takiego, aby dopasować każdą parę:

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

* jest zawarty w klasie znaków, więc to robi W przypadku regex nie ma potrzeby stosowania specjalnego przypadku.

3

Mam written a parser w PHP. To nie jest skomplikowane, ale da ci szereg rodzajów mime w kolejności preferencji.

+0

połączona strona jest "wyłączona" – MageWind

1

Znaleziono kolejną realizację w php here

0

Począwszy od .NET 4.5 (myślę, Microsoft dokonały info o wersjach ramowych < 4,5 raczej niejasne te dni), można użyć one of the the built in parsers od System.Net.Http.Headers:

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

Następnie można zrobić coś takiego:

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

daje piękny listę wszystkich rodzajów mediów, gdzie preferowanych opcja jest pierwszym elementem. Oto LINQPad Dump z mediaTypes wyniku z przykładu:

LINQPad dump of results

Hat końcówka do this answer, że mnie na właściwe tory.