के लिए सामान्य नियंत्रक मैं वर्तमान में एएसपी.नेट एमवीसी 4 वेब एपीआई में ओडाटा एंडपॉइंट्स के साथ प्रयोग कर रहा हूं। मुझे अवधारणा पसंद है और हमारी परियोजना में इसका उपयोग करने के कुशल तरीकों के साथ आने का प्रयास करें। मैं कर सकते हैंएएसपी.नेट वेबएपीआई: ओडाटा एंडपॉइंट
public IQueryable GetAll(string entityName);
मानक वेब एपीआई में (के रूप में OData नियंत्रकों के खिलाफ): हम एक सेवा है जो एक IQueryable लौटने में सक्षम है और इनपुट के रूप में एक इकाई का नाम लेता है: एक सवाल मेरे पास है निम्नलिखित है एक सामान्य नियंत्रक बनाएं, जिसे फ़ॉर्म/एपीआई/इकाइयों/{entityName} में बुलाया जा सकता है और IQueryable लौटाता है।
- मॉडल में संस्थाओं रजिस्टर: एक OData नियंत्रक के मामले में, मैं निम्नलिखित इकाई-विशिष्ट चरण बाहर ले जाने के।
- EntitySetController <> से प्राप्त प्रत्येक इकाई के लिए एक अलग नियंत्रक बनाएं।
मैं सामान्य सेवा का उपयोग करना चाहता हूं और यथासंभव अधिक इकाई-विशिष्ट कार्यान्वयन से बचना चाहता हूं। यदि सेवा संस्थाओं और संबंधित प्रकारों की सूची वापस कर सकती है तो पहला कदम आसानी से स्वचालित हो सकता है। वह चरण 2 छोड़ देता है, क्योंकि अब तक मुझे प्रत्येक इकाई के लिए एक विशिष्ट नियंत्रक बनाने की आवश्यकता है। मैं इससे बचना चाहता हूं और जेनेरिक सेवा का उपयोग करने वाला एक सामान्य नियंत्रक बनाना चाहता हूं।
क्या कोई भी ओडाटा रूटिंग को प्रभावित करके समाधान की सिफारिश कर सकता है?
आपको नल इकाइयों के लिए odataPath की जांच करने की आवश्यकता है। यह मेटा-डेटा प्रश्नों को इंगित करता है जिन्हें डिफ़ॉल्ट मार्ग पर जाने की आवश्यकता होती है। यदि (odataPath.EdmType == null || odataPath.EntitySet == null) वापस शून्य करें; – xt1
इसने एक ही प्रोजेक्ट में v3 और v4 प्राप्त करने में समस्या हल की, क्योंकि आपके पास डुप्लिकेट नियंत्रक नाम नहीं हो सकते हैं, और 406 में एक अलग नियंत्रक नाम के परिणाम पर रूट विशेषता का उपयोग करने का प्रयास कर रहे हैं। नियंत्रक नाम सम्मेलन के लिए EntityV4Controller, लौटने odataPath.NavigationSource.Name + "V4" नियंत्रक मिलेगा। –
मेटाडेटा प्रश्नों की जांच करने के लिए @ xt1 की विधि स्पष्ट रूप से आम है, लेकिन विश्वसनीय नहीं है। हमारे प्रोजेक्ट में ऐसी स्थितियां हैं जहां 'odataPath.EntitySet == null' है, लेकिन यह $ मेटाडेटा अनुरोध नहीं है। मैंने पाया है कि 'ODataSegmentKinds.ServiceBase' और 'ODataSegmentKinds.Metadata' के संयोजन की जांच करना अधिक विश्वसनीय है।(यह एक वी 3 सेवा के लिए है।) –