2012-11-26 16 views
10

पर वेब एपीआई और एपीआई दस्तावेज जोड़ना मैंने सफलतापूर्वक web api controller को मौजूदा MVC4 एप्लिकेशन में सफलतापूर्वक जोड़ा है।मौजूदा एमवीसी प्रोजेक्ट

मैं एपीआई दस्तावेज़ीकरण कार्यक्षमता चाहता हूं जैसा कि नए वेब एपीआई नमूने (ex. http://sample.hostname.com/help) में उपलब्ध है। मेरा मानना ​​है कि ये ApiExplorer कक्षा का उपयोग करते हैं। मैं सिर्फ अपनी परियोजना में HelpPage क्षेत्र को कॉपी की कोशिश की, लेकिन जब मैं मदद करने के लिए नेविगेट करने के लिए कोशिश मैं एक त्रुटि

"The type String cannot be constructed. You must configure the container to supply this value"

मिलता है।

एपीआई के स्वचालित दस्तावेज जोड़ने के लिए मुझे क्या करना चाहिए?

उत्तर

1

चेक सहायता पृष्ठ के बारे में याओ के ब्लॉग:

http://blogs.msdn.com/b/yaohuang1/

+0

सभी sampl हैं वेब एपीआई स्टैंडअलोन प्रोजेक्ट के भीतर काम करता है, वहां कोई नमूना नहीं है जहां वह मौजूदा एमवीसी प्रोजेक्ट – mare

+0

के भीतर हेल्पपेज का उपयोग करेगा, आप 'माइक्रोसॉफ्ट.एस्पनेट.एबएपीआई.हेल्पपेज' न्यूज पैकेज स्थापित कर सकते हैं जो 'हेल्पपेज' नामक एक क्षेत्र बनायेगा। आपके एमवीसी आवेदन में। –

+0

आप इसे इंस्टॉल कर सकते हैं, हां, और मैंने किया लेकिन यह दस्तावेज के लिए कोई एपीआई नियंत्रक नहीं उठा रहा है इसलिए दस्तावेज़ खाली हैं, शायद आप अन्यथा साबित कर सकते हैं? – mare

2
  1. NuGet पैकेज प्रबंधक में, ऑनलाइन संकुल के बीच "helppage" के लिए खोज।
  2. यह स्थापित करें (अपडेट हो रही रखता है और यह सब करता है आप की जरूरत भी यदि आप नवीनतम .net है)
  3. में एक क्षेत्र जोड़ देगा और उस में सभी आवश्यक फ़ाइलें आप जरूरत पैदा। इसे बनाएं और इसे [your_root]/सहायता
  4. पर त्वरित अवलोकन प्राप्त करने के लिए Yao's blog here पर वीडियो देखें, इसे आप कैसे अनुकूलित कर सकते हैं। वीडियो थोड़ा पुराना है, यह अभी भी मान्य है।
+0

यह एमवीसी टेम्पलेट – mare

4

मेरी धारणा यह है कि वेब एपीआई एंडपॉइंट्स के लिए स्वचालित दस्तावेज प्रदान करना आवश्यक है, एमवीसी एंडपॉइंट्स नहीं। उस धारणा के आधार पर, मैंने एक पीओसी बनाया जो इरादे के रूप में काम करता है और यदि आवश्यक हो तो मैं हमेशा आपको एक ज़िप भेज सकता हूं :)।

  1. एक नया एमवीसी 4 इंटरनेट एप्लिकेशन बनाएं। इससे घर और खाता नियंत्रक, मिलान करने वाले विचार और एमवीसी रूटिंग उत्पन्न होंगे।

  2. पैकेज प्रबंधक के ऑनलाइन अनुभाग में "हेल्पपेज" की खोज करके Microsoft.AspNet.WebApi.HelpPage पैकेज में जोड़ें।

  3. "एपीआई" नामक आपके वेब एपीआई नियंत्रकों के लिए एक नया फ़ोल्डर जोड़ें। यह WebApiConfig.cs की रजिस्टर विधि में स्थापित आपके WebApi रूटिंग द्वारा संचालित है। मेरा निम्नानुसार है:

    public static void Register(HttpConfiguration 
    { 
        config.Routes.MapHttpRoute(
         name: "DefaultApi", 
         routeTemplate: "api/{controller}/{id}", 
         defaults: new { id = RouteParameter.Optional }); 
    } 
    
  4. प्रोजेक्ट बनाएं। एंडपॉइंट/सहायता हिट करें। यह मेरे एपीआई नियंत्रक (एक प्राप्त और एक पोस्ट एंडपॉइंट) में सभी अंत बिंदु थूकना।

इसे हेल्पपेज पैकेज जोड़कर जेनरेट किए गए क्षेत्र फ़ोल्डर में किए गए किसी भी बदलाव की आवश्यकता नहीं थी। यह आवश्यक था कि फ़ोल्डर में एक नया एपीआई फ़ोल्डर और एक नया एपीआई नियंत्रक (खाली) जोड़ रहा हो, और नए नियंत्रक में निर्मित एक त्वरित दो अंतराल।

+0

के भीतर काम नहीं करता है, मेरे मौजूदा प्रोजेक्ट के साथ यह काम नहीं करता है, लेकिन इसे एक नए प्रोजेक्ट एएसएपी – mare

+0

पर आज़माएगा यदि यह काम नहीं कर रहा है तो मुझे संदेह है कि आपके पास कुछ निर्भरता गायब है। एक ताजा प्रोजेक्ट बनाएं और लापता डीएलएस की जांच करें? वह या शायद आपके पास अद्वितीय रूटिंग या global.asax कॉन्फ़िगरेशन है। –

+0

मैं आपके उत्तर को ऊपर उठा रहा हूं क्योंकि यह वास्तव में कहता है कि यह काम करना चाहिए और यह करता है (ताजा एमवीसी परियोजनाओं में, जब तक कि आपने कुछ स्थापित नहीं किया है जो मेरे मामले में एपीएक्सप्लोरर को अवरुद्ध करेगा) – mare

3

मैं पहले उत्तर की पुष्टि कर सकता हूं - हेल्पपेज किसी भी नियंत्रक को उठाता है चाहे वह यह कहां स्थित हो, यह रूटिंग से मेल खाता है और एपीकंट्रोलर से विरासत में मिलता है।

मैंने इसे एक बार शिकार करने में घंटों बिताए। मैंने सोचा, यह कुछ ऐसा प्रोजेक्ट में जोड़ा जाना चाहिए जो मेरे मार्ग/एपीआई को गड़बड़ कर रहा हो। तो मैंने इसे विभिन्न Nuget संकुल को स्थापित/हटाने के घंटों के बाद पाया। मेरी परियोजना के साथ समस्या यह थी कि मेरे पास Glimpse.Mvc4 पैकेज स्थापित था। इस पैकेज ने किसी भी तरह से मेरे एपीआई लेने के लिए ApiExplorer को रोका। यह स्पष्ट रूप से Glimpse.Mvc4 (या Glimpse.AspNet) पैकेज या ApiExporer के भीतर एक बग के भीतर एक बग है (मुझे यह पता लगाने में परेशानी नहीं हुई कि बग क्या था)।

मैं इसकी रिपोर्ट ग्लैमर टीम को करूंगा। यहां इस उत्तर को पोस्ट करना शायद किसी और की मदद करेगा।

+0

आज के रूप में, Glimpse.Mvc4 समस्या उत्पन्न कर रहा था और मुझे इसे हटाना पड़ा। मैं वास्तव में नवीनतम संस्करण को आजमा सकते हैं और इंस्टॉल कर सकता हूं (जो समस्या हल कर सकता है)। आपके विश्लेषण के लिए धन्यवाद, इससे मदद मिली। – SBirthare

6

जैसा कि अन्य ने पहले ही कहा है, आपको पहले NuGet पैकेज Microsoft.AspNet.WebApi.HelpPage इंस्टॉल करना होगा। यह दस्तावेज प्रदर्शित करने के लिए आवश्यक विचारों, मॉडलों और नियंत्रकों के साथ आपके आवेदन में एक नया हेल्पपेज क्षेत्र बनाएगा।

हालांकि, HelpController कि उत्पन्न होता है एक ओवरलोड निर्माता शामिल हैं:

public HelpController(HttpConfiguration config) 
{ 
    Configuration = config; 
} 

यह एकता (या शायद किसी भी डि कंटेनर की तरह) के साथ अच्छी तरह से खेलने के लिए प्रतीत नहीं होता। आपको यह त्रुटि मिलती है:

[InvalidOperationException: The type String cannot be constructed. You must configure the container to supply this value.] 

इस अधिभार को हटाएं और इसे काम करना चाहिए। http://www.stefan-scheller.com/2013/08/the-type-string-cannot-be-constructed-web-api-with-unity/

+0

मैं कहूंगा कि एक बेहतर समाधान वह है जिसका मैंने जवाब दिया है। इसे हटाने के बजाय इसे सुरक्षित किया गया है। सुनिश्चित नहीं है कि आप किस एमवीसी का उपयोग कर रहे हैं, लेकिन 5.2.2 में पैरामीटर रहित कन्स्ट्रक्टर उस व्यक्ति को कॉल करता है जिसे आप सुझाव दे रहे हैं। – Carl

+0

@ करल आप सही हो सकते हैं, लेकिन जब मैंने इसका उत्तर दिया (एक साल पहले), एमवीसी 5 केवल आरसी था। ओपी ने वी 4 का जिक्र किया होगा, क्योंकि ओपी ने अपने प्रश्न में कहा था। –

0

मैं सिर्फ इस मुद्दे में भाग:

इसके अलावा सिर्फ इस के लिए एक और संदर्भ पाया। यह मेरे लिए क्या था।

मेरे पास पिछले प्रोजेक्ट (डब्ल्यू/एमवीसी 5 और वेब एपीआई 2) पर काम करने वाले हेल्प पेज थे, इसलिए मुझे पता था कि यह मेरी नई परियोजना में कुछ अलग था। पुरानी (कामकाजी) परियोजना में बदल गया मैं केवल वेब एपीआई नियंत्रकों में डी कर रहा था, एमवीसी नियंत्रकों नहीं। मुझे एमवीसी नियंत्रकों में डीआई की आवश्यकता नहीं थी, इसलिए मैंने एमआईसी निर्भरता रिज़ॉल्वर (मेरे मामले में यूनिटीएमवीसीएक्टिवेटर क्लास) के रूप में यूनिटी पर निर्भरता रीसोलवर को बूटस्ट्रैप करने के कोड को बस टिप्पणी की।

स्पष्ट रूप से यह सभी के लिए एक विकल्प नहीं होगा, लेकिन जहां नहीं, @ एड्रियन ब्राउन का जवाब यह तय होने तक आपकी सर्वश्रेष्ठ शर्त की तरह दिखता है।

5

V5.2.2 निम्नलिखित कोड है:

public HelpController() 
     : this(GlobalConfiguration.Configuration) 
    { 
    } 

    public HelpController(HttpConfiguration config) 
    { 
     Configuration = config; 
    } 
HelpController

एकता में

सबसे तर्क के साथ निर्माता का उपयोग करता है, तो यह parameterless निर्माता मैं करने के लिए दूसरा अधिभार बदल उपयोग करने के लिए प्राप्त करने के लिए संरक्षित:

protected HelpController(HttpConfiguration config) 
    { 
     Configuration = config; 
    } 

और सहायता पृष्ठ वापस

+0

धन्यवाद, मेरी समस्या हल हो गई! [इस धागे] से आने वाले आपके उत्तर में मिला (http://stackoverflow.com/questions/18389309/the-type-string-cannot-be-constructed), मेरी समस्या हल हो गई। –

+0

धन्यवाद। यह सबसे सरल और कम से कम प्रभावशाली उत्तर है। – NER1808

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