2012-09-30 13 views
6

से कुछ फ़ील्ड लौटें यदि मैं मॉडल से केवल कुछ फ़ील्ड वापस लौटना चाहता हूं तो मुझे किस दृष्टिकोण का उपयोग करना चाहिए? ?एएसपी.नेट वेब एपीआई

क्षेत्रों = ईमेल, expiration_date, अवतार (thumb_width, thumb_height, thumb_url)

यह अभिव्यक्ति भी हेडर किया जा सकता है: मैं, कुछ क्षेत्रों के लिए पूछने के लिए कुछ इस तरह सक्षम होना चाहते हैं निवेदन। मेरे पास उपयोगकर्ता के अंदर अवतार की तरह घोंसला वाली वस्तुएं भी हैं।

यह मुझे सौ एमबी यातायात बचाएगा, क्योंकि मेरे कुछ मॉडल वास्तव में भारी हैं।

अद्यतन: फ़ील्ड चयन जेसन और एक्सएमएल प्रतिक्रियाओं दोनों के साथ काम करना चाहिए।

उत्तर

2

मैं एक कस्टम के साथ डिफ़ॉल्ट अनुबंध समाधानकर्ता (http://frankapi.wordpress.com/2012/09/09/going-camelcase-in-asp-net-mvc-web-api/ देखें) की जगह लेंगे, Newtonsoft.Json.Serialization.DefaultContractResolver वर्ग से GetSerializableMembers विधि ओवरराइड और क्वेरी स्ट्रिंग क्षेत्रों के मूल्य के साथ अपने परिणामों को फ़िल्टर।

चाहे आप उस वर्ग से क्वेरीस्ट्रिंग तक पहुंच सकें, एक और सवाल है, आप इसे प्राप्त करने के लिए स्थिर httpcontext.current का उपयोग करने में सक्षम हो सकते हैं, लेकिन एक क्लीनर विकल्प हो सकता है।

+0

मेरे यहां एक उदाहरण है जो सशर्त रूप से JSON serialize ऑब्जेक्ट से गुणों को हटा देगा। https://gist.github.com/33b5e6056c1d59e83b1a.git इसे यहां दिखाए गए विवरणों का उपयोग करके एएसपी.NET एपीआई में लगाया जा सकता है http://tostring.it/2012/07/18/customize-json-result-in-web -api / –

6

मुझे लगता है कि के लिए ऐसा करता है एक nuget पैकेज नहीं मिला आप

WebApi.PartialResponse

Git हब स्रोत कोड:
https://github.com/dotarj/PartialResponse

यह अनिवार्य, फ़ॉर्मेटर ऊपर चर्चा लपेटता जिससे कि आप केवल कॉन्फिगर करना यह इस तरह है:

GlobalConfiguration.Configuration.Formatters.Clear(); 
GlobalConfiguration.Configuration.Formatters.Add(new PartialJsonMediaTypeFormatter() { IgnoreCase = true }); 

फिर, आप निर्दिष्ट कर सकते हैं आपके अनुरोध में ?fields=<whatever>, और यह मॉडल को केवल उन फ़ील्ड के साथ वापस कर देगा।

0

आप ओडाटा का भी उपयोग कर सकते हैं। यह आपको क्वेरी और एपीआई के बारे में बहुत लचीलापन देता है। http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/odata-v4/create-an-odata-v4-endpoint

अपने मामले में, आप $ का उपयोग करेंगे। मैं यह भी अनुमान लगा रहा हूं कि अवतार एक और वर्ग है, इसलिए आप $ का विस्तार करेंगे।

/api/endpoint?$select=email,expiration_date&$expand=avatar($select=thumb_width,thumb_height,thumb_url) 

यदि उपधारा के लिए वाक्यविन्यास सही है, तो मुझे 100% नहीं है, लेकिन मुझे लगता है कि यह है।

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