有没有人有任何建议(或正则表达式)解析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