2013-08-15 10 views
25

मैं वेब एपीआई उपयोग में नौसिखिया हूं, और समस्या मैं समस्या से जूझ रहा हूं, मुझे समाधान नहीं मिल रहा है। आम समस्या है, जब आवेदन/x-www फार्म-urlencoded मीडिया प्रकार नमूना के बजाय, लोगों कोवेब एपीआई सहायता पृष्ठ से मीडिया-प्रकार नमूना बहिष्कृत करें

मीडिया प्रकार के लिए नमूना जेनरेट करने में विफल 'आवेदन/x-www फार्म-urlencoded' प्राप्त है। प्रकार 'कार्य' लिखने के लिए फॉर्मेटर 'FormUrlEncodedMediaTypeFormatterTracer' का उपयोग नहीं कर सकता।

सामान्य सुझाव कॉन्फ़िगर फ़ाइल में अपना नमूना निर्दिष्ट करना है, लेकिन मुझे आश्चर्य है, क्या मैं इस मीडिया प्रकार सहायता अनुभाग को हटा सकता हूं?

config.SetSampleForType("", new MediaTypeHeaderValue("application/x-www-form-urlencoded"), typeof(object)); 

मुझे एक खाली अनुभाग देता है।

अग्रिम धन्यवाद!

उत्तर

48
  • क्या मैं पूछ सकता हूं कि आप इस अनुभाग को क्यों निकालना चाहते हैं? जैसे आप अपनी सेवा में फॉर्मूरलेनोडेड फॉर्मेटर का समर्थन नहीं करना चाहते हैं? यदि हां, तो आप फॉर्मेटर के संग्रह से खुद को फॉर्मेटर को हटा सकते हैं, इस मामले में यह खंड दिखाई नहीं देगा।

    config.Formatters.Clear(); 
    config.Formatters.Add(new JsonMediaTypeFormatter()); 
    config.Formatters.Add(new XmlMediaTypeFormatter()); 
    
  • वैकल्पिक रूप से, आप Areas\HelpPage\SampleGeneration\HelpPageSampleGenerator.cs पर फ़ाइल में निम्न परिवर्तन (highlighed टिप्पणी) करते हैं और निम्नलिखित है, जो formatters को फ़िल्टर करना है कर सकते हैं:

    // Do the sample generation based on formatters only if an action doesn't return an HttpResponseMessage. 
        // Here we cannot rely on formatters because we don't know what's in the HttpResponseMessage, it might not even use formatters. 
        if (type != null && !typeof(HttpResponseMessage).IsAssignableFrom(type)) 
        { 
         object sampleObject = GetSampleObject(type); 
    
         // Change Begin -------------------------------------- 
         IEnumerable<MediaTypeFormatter> filteredFormatters = formatters.Where(frmtr => frmtr.GetType() != typeof(JQueryMvcFormUrlEncodedFormatter)); 
    
         foreach (var formatter in filteredFormatters) 
         { 
    
         // Change End -------------------------------------- 
    
+0

आपके उत्तर के लिए धन्यवाद! आप सही हैं, मैं इस फॉर्मेटर का समर्थन बहिष्कृत करना चाहता हूं, क्योंकि मैं बड़ी संरचित वस्तुओं के साथ काम कर रहा हूं और यह उन्हें यूरेनेंकोड के रूप में लिखने के लिए एक दुःस्वप्न होगा। असल में, मैंने फ़ॉर्मेटर्स सूची से फ़ॉर्मेटर को हटाने की कोशिश की है (मेरी गलती, मैंने इसे प्रश्न में नहीं बताया), लेकिन यह सेक्शन पीढ़ी को प्रभावित नहीं करता है। –

+2

मैं गलत था, मैंने इस तरह के स्वरूपक को हटाने की कोशिश की: 'var formatter = _config.Formatters.FormUrlEncodedFormatter; _config.Formatters.Remove (प्रारूप); ' आपका कोड अपेक्षित काम करता है! धन्यवाद! –

+0

यह कॉन्फ़िगरेशन वैरिएबल वैश्विक कॉन्फ़िगरेशन का संदर्भ है, क्या यह ऐप के अन्य क्षेत्रों को प्रभावित नहीं करेगा? –

0

आप तो विशिष्ट प्रारूप प्रकार को हटाना चाहते हैं इस कोड का उपयोग करें:

  var matches = config.Formatters 
          .Where(f => f.SupportedMediaTypes 
             .Where(m => m.MediaType.ToString() == "application/xml" || 
                m.MediaType.ToString() == "text/xml" || 
                m.MediaType.ToString() == "application/x-www-form-urlencoded") 

             .Count() > 0) 
          .ToList(); 
     foreach (var match in matches) 
      config.Formatters.Remove(match); 
संबंधित मुद्दे