2008-11-01 97 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,你为我在正确的轨道上。