有沒有人有任何建議(或正則表達式)解析HTTP接受標頭?解析接受標頭
我想在ASP.NET MVC中做一些內容類型的協商。似乎沒有內置的方式(這很好,因爲這裏有許多學派),但解析並不是完全無關緊要的,如果某人已經完成了,我寧願不重新發明輪子它很好,願意分享。
有沒有人有任何建議(或正則表達式)解析HTTP接受標頭?解析接受標頭
我想在ASP.NET MVC中做一些內容類型的協商。似乎沒有內置的方式(這很好,因爲這裏有許多學派),但解析並不是完全無關緊要的,如果某人已經完成了,我寧願不重新發明輪子它很好,願意分享。
你見過this article?它提供了一個非常全面的實現來解析Accept頭,並隨後對它做一些有用的事情。
RFC相當複雜。如果正則表達式遵循這些規則的字母,它會變成幾行。
如果你已經有了接受頭,而忽略了報價,參數,你可以做這樣的事情每對匹配:
/([^()<>@,;:\\"\/[\]?={} \t]+)\/([^()<>@,;:\\"\/[\]?={} \t]+)/
*
包含在字符類,它確實是這樣在正則表達式中不需要任何特殊情況。
發現在PHP here
另一個實現閱讀xml.com文章,我決定不寫一個函數的Accept標頭後自己;)
幸運的文章指向一個好的圖書館:https://code.google.com/p/mimeparse/ - 在我來說,我需要它作爲一個Node.js的模塊:https://github.com/kriskowal/mimeparse
隨着.NET 4.5(我認爲微軟已經在框架版本< 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從例如mediaTypes
結果Dump
:
帽尖到this answer,你爲我在正確的軌道上。
好問題 - 我在另一個項目中尋找這個,以及! – 2008-11-01 04:00:48