2016-08-29 4 views
5

मुझे F # JSON प्रकार प्रदाता JsonValue.Request विधि का उपयोग करके भेजे गए यूटीएफ -8 HTTP पेलोड के रूप में एन्कोड करने की आवश्यकता है।POST अनुरोधों के लिए यूटीएफ -8 का उपयोग करने के लिए F # JSON प्रकार प्रदाता को कॉन्फ़िगर कैसे करें?

अनुरोध HTTP शीर्षलेख निर्दिष्ट करने की अनुमति देता है लेकिन JSON प्रकार प्रदाता सामग्री-प्रकार शीर्षलेख को "अनुप्रयोग/जेसन" के रूप में "charset" क्वालीफायर निर्दिष्ट किए बिना सेट करने का ख्याल रखता है। यदि मैं सामग्री प्रकार को स्वयं सेट करने का प्रयास करता हूं तो मैं डुप्लिकेट हेडर वैल्यू (वास्तव में एक त्रुटि उत्पन्न करता हूं) के साथ समाप्त होता हूं। और केवल "application/json" के साथ निम्नलिखित कोड का चयन करता है defauls एन्कोडिंग:

let getEncoding contentType = 
    let charset = charsetRegex.Match(contentType) 
    if charset.Success then 
     Encoding.GetEncoding charset.Groups.[1].Value 
    else 
     HttpEncodings.PostDefaultEncoding 

PostDefaultEncoding है ISO-8859-1 जो ​​हमारे परिदृश्य में उपयुक्त नहीं है है।

कोई विचार है कि JsonValue.Request पेलोड के लिए PostDefaultEncoding को ओवरराइड किया जा सकता है?

उत्तर

2

मुझे लगता है कि JsonValue.Request विधि केवल एक सुविधाजनक सहायक है जो सबसे आम परिदृश्यों को कवर करती है, लेकिन यह आवश्यक नहीं है कि आपको मनमाने ढंग से अनुरोध करने के लिए आवश्यक सभी शक्तियां मिलें।

let buffer = System.Text.Encoding.UTF8.GetBytes "" 
Http.RequestString 
    ("https://httpbin.org/post", 
    httpMethod="POST", 
    body=HttpRequestBody.BinaryUpload buffer) 

इसलिए, यदि आप "" बदल देते हैं: आप किसी भी तरह से डेटा अपलोड करने देता है जो (जिसके अनुसार, UTF-8 एक और अधिक उचित डिफ़ॉल्ट की तरह लगता है।)

सबसे सामान्य एफ # डाटा समारोह Http.Request है, yourJsonValue.ToString() के साथ, यह यूटीएफ -8 एन्कोडेड बॉडी के साथ अनुरोध भेजना चाहिए।

+0

धन्यवाद टॉमस, Http.Request का उपयोग करके निश्चित रूप से इसे हल किया जाएगा। मैंने इसके बजाय Http.fs का उपयोग किया लेकिन आपके सुझाव के साथ मैं केवल एक पुस्तकालय के साथ सबकुछ प्राप्त कर सकता था। लेकिन JsonValue में थोड़ा सुधार करना अच्छा होगा। अनुरोध करें क्योंकि यह स्ट्रिंग बफर प्राप्त करने के आसपास इस समारोह की आवश्यकता को खत्म कर देगा, HTTP अनुरोध निकाय इत्यादि निर्दिष्ट करेगा। ऐसा करने का एक तरीका सामग्री-एन्कोडिंग हेडर का सम्मान करना है। एक बार यह निर्दिष्ट हो जाने पर यह डिफ़ॉल्ट आईएसओ -885 9 -1 ओवरराइडिंग पेलोड एन्कोडिंग का चयन कर सकता है। –

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

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