2008-11-01 94 views
23

有沒有人有任何建議(或正則表達式)解析HTTP接受標頭?解析接受標頭

我想在ASP.NET MVC中做一些內容類型的協商。似乎沒有內置的方式(這很好,因爲這裏有許多學派),但解析並不是完全無關緊要的,如果某人已經完成了,我寧願不重新發明輪子它很好,願意分享。

+0

好問題 - 我在另一個項目中尋找這個,以及! – 2008-11-01 04:00:48

回答

9

你見過this article?它提供了一個非常全面的實現來解析Accept頭,並隨後對它做一些有用的事情。

0

RFC相當複雜。如果正則表達式遵循這些規則的字母,它會變成幾行。

如果你已經有了接受頭,而忽略了報價,參數,你可以做這樣的事情每對匹配:

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

*包含在字符類,它確實是這樣在正則表達式中不需要任何特殊情況。

3

我在written a parser在PHP中。這並不複雜,但它會按照偏好的順序爲您提供一系列MIME類型。

+0

鏈接的網站是「禁用」 – MageWind 2015-02-04 18:30:18

0

隨着.NET 4.5(我認爲微軟已經在框架版本< 4.5默默無聞的這幾天做的信息),可以使用one of the the built in parsersSystem.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從例如mediaTypes結果Dump

LINQPad dump of results

帽尖到this answer,你爲我在正確的軌道上。