2008-11-01 11 views
23

क्या किसी को भी HTTP स्वीकृति हेडर को पार्स करने के लिए कोई सुझाव (या एक नियमित अभिव्यक्ति) है?पार्स स्वीकृति हैडर

मैं एएसपी.नेट एमवीसी में कुछ सामग्री-प्रकार की बातचीत करने की कोशिश कर रहा हूं। ऐसा कोई प्रतीत नहीं होता है (जो ठीक है, क्योंकि यहां बहुत सारे स्कूल हैं), लेकिन पार्सिंग पूरी तरह से तुच्छ नहीं है और अगर कोई पहले से ही कर चुका है तो मैं पहिया का फिर से आविष्कार नहीं करूंगा यह अच्छी तरह से और साझा करने के लिए तैयार है।

+0

अच्छा सवाल - मैं इसे किसी अन्य प्रोजेक्ट में भी ढूंढ रहा हूं! –

उत्तर

9

क्या आपने this article देखा है? यह स्वीकार करने वाले शीर्षलेख को पार्स करने और इसके बाद कुछ उपयोगी करने के लिए एक बहुत व्यापक कार्यान्वयन देता है।

0

RFC काफी जटिल है। अगर रेगेक्स को पत्र में इन नियमों का पालन करना है, तो यह कई लाइनें बन जाएगा।

आप पहले से ही स्वीकार करें हेडर है, और उद्धरण और मानकों की अनदेखी, तो आप प्रत्येक जोड़ी मिलान करने के लिए कुछ इस तरह कर सकता है:

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

* चरित्र वर्ग में शामिल है, तो यह होता है रेगेक्स में किसी विशेष मामले की आवश्यकता नहीं है।

3

मेरे पास PHP में written a parser है। यह जटिल नहीं है, लेकिन यह आपको प्राथमिकता के क्रम में माइम प्रकारों की एक सरणी देगा।

+0

जुड़ा हुआ साइट "अक्षम" है – MageWind

1

में एक और कार्यान्वयन मिले xml.com लेख मैं स्वीकार करता हूँ के लिए शीर्ष लेख अपने आप को एक समारोह लिख नहीं करने का फैसला किया पढ़ने के बाद;)

सौभाग्य से एक अच्छा पुस्तकालय के लिए लेख अंक: https://code.google.com/p/mimeparse/ - मेरे मामले में मैं एक Node.js मॉड्यूल के रूप में इसकी जरूरत: https://github.com/kriskowal/mimeparse

0

.NET 4.5 के रूप में (मुझे लगता है कि-माइक्रोसॉफ्ट ढांचे संस्करणों < 4.5 बल्कि अस्पष्ट इन दिनों के बारे में जानकारी बना दिया है), तो आपसे one of the the built in parsers उपयोग कर सकते हैं: आप सभी मीडिया प्रकार, जहां वरीय विकल्प पहले आइटम है का एक अच्छा सूची देते

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

:

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

तो फिर तुम कुछ इस तरह कर सकते हैं। सही रास्ते पर मुझे प्राप्त करने के लिए this answer को

LINQPad dump of results

Hat टिप,: यहाँ एक LINQPad उदाहरण से mediaTypes परिणाम की Dump है।

संबंधित मुद्दे