2009-02-21 12 views
5

के लिए एएसपीनेट एमवीसी का उपयोग कर मैं एक आरएसटी आधारित सेवा के लिए एक मंच के रूप में एएसपी.NET एमवीसी का उपयोग कर रहा हूं। मुझे पता है कि डब्ल्यूसीएफ ने आरईएसटी सेवाओं के लिए समर्थन में बनाया है; हालांकि, मैं अनुरोध के आधार पर कई प्रकार के डेटा लौटने पर विचार कर रहा हूं।आरईएसटी आधारित एंडपॉइंट

मैं ग्राहक को सामग्री प्रकार का अनुरोध करना चाहता हूं। इसलिए यदि वे उदाहरण के लिए टेक्स्ट/एचटीएमएल भेजते हैं तो मैं अपना मॉडल एचटीएमएल में प्रस्तुत करूंगा, अगर वे टेक्स्ट/एक्सएमएल का अनुरोध करते हैं तो यह एक्सएमएल लौटाएगा। हम जेएसओएन भी कर सकते थे।

क्या कोई इस के साथ कोई समस्या देखता है?

डब्ल्यूसीएफ का उपयोग नहीं करते हुए सेवा कॉल करते समय ग्राहक की जटिलता में वृद्धि हो सकती है क्योंकि वे प्रॉक्सी को स्वतः उत्पन्न नहीं कर पाएंगे; हालांकि, मेरे मामले में, ग्राहक या तो ब्राउज़र अनुरोध एचटीएमएल, या जावा क्लाइंट पुस्तकालयों xml प्रसंस्करण होगा।

चूंकि डब्ल्यूसीएफ का उपयोग नहीं कर रहे थे इसलिए हमें सेवा को सुरक्षित करने की आवश्यकता है; हालांकि, मुझे लगता है कि हम फॉर्म प्रमाणीकरण का उपयोग करके ऐसा कर सकते हैं।

इस का लाभ यह है कि कोई बात नहीं क्या डेटा ग्राहक यह सब एक ही नियंत्रक/मॉडल आदि से गुजर रहा है अनुरोध कर रहा है के प्रकार के ...

उत्तर

2

Haack की पोस्ट पढ़ने में सामग्री प्रकार इंगित करने के लिए एक्सटेंशन का उपयोग कर के बारे में के बाद, मैं अपनी बेहतर लगता है स्वीकारें हैडर बंद कुंजीयन। मुझे और अधिक आराम लगता है, हालांकि ब्राउज़र को आग लगाना और आपके यूआरएल का परीक्षण करना थोड़ा मुश्किल है।

मैं इसे करने के बारे में एक छोटा ब्लॉग आलेख और अपने नियंत्रक से HttpContext को सारणीबद्ध करने के लिए मॉडलबिंडर का उपयोग करके: http://jberke.blogspot.com/2009/03/aspnet-mvc-model-binder.html

अतिरिक्त रूप से ट्रॉय की ऑप्ट-इन टिप्पणी के जवाब में, मैं अपने मॉडल के एक्सएमएल को प्रस्तुत करने के लिए दृश्य का उपयोग कर रहा था। इसने मुझे एक ही मॉडल के लिए अलग-अलग एक्सएमएल प्रारूपों की अनुमति दी। जो समझ में आता है। यदि आपको विभिन्न क्लाइंट्स के लिए वर्जनिंग या विभिन्न प्रारूपों का समर्थन करने की आवश्यकता है तो क्या होगा। मैं ढांचे स्वचालित रूप से कुछ भी प्रतिपादन के विचार पसंद नहीं है।

2

आप इस ब्लॉग पोस्ट पर एक नज़र लेने के लिए चाहते हो सकता है और फिल Haack से निम्नलिखित चर्चा:

http://haacked.com/archive/2009/01/06/handling-formats-based-on-url-extension.aspx

उनकी कोड उत्पादन का निर्धारण करने के लिए अनुरोध फाइल एक्सटेंशन (.html, .json, .xml) का उपयोग करता है, लेकिन आप बस के रूप में आसानी से या Accept-Encoding इस्तेमाल कर सकते हैं (दोनों)।

नोट: मैंने फिल की पोस्ट पर एक टिप्पणी छोड़ दी और अभी भी दृढ़ता से महसूस किया है कि उन प्रतिपादन विधियों को "ऑप्ट-इन" करने के लिए कार्रवाइयों की आवश्यकता होनी चाहिए। एचटीएमएल प्रतिपादन के साथ आप अंत उपयोगकर्ता को कितना व्यूडेटा प्रदर्शित करते हैं, इस पर नियंत्रण करते हैं। एक्सएमएल/जेएसओएन प्रतिपादन संभवतः आपके द्वारा व्यूडेटा में पास की गई सभी चीज़ों को प्रस्तुत करेगा, भले ही आप इसे सार्वजनिक रूप से दिखाना चाहते हों या नहीं।

3

Haack के समाधान निश्चित रूप से इसके बारे में जाने के लिए सबसे अच्छा तरीका है, हालांकि यह एक अच्छा प्रारंभिक बिंदु है नहीं है,।

स्टार्टर्स के लिए, यदि आप एंटीटी फ्रेमवर्क (या बाद में कुछ समय बाद लिंक से एसक्यूएल में स्विच करने का निर्णय लेते हैं) तो JsonResult तोड़ देगा क्योंकि यह परिपत्र संदर्भों (आमतौर पर अधिकांश डेटा मॉडल) के साथ ऑब्जेक्ट ग्राफ़ को क्रमबद्ध नहीं कर सकता है। दूसरा, यह एक ही संसाधन के लिए कई अंत-बिंदुओं का खुलासा करता है।

यह करने के लिए सही तरीका X-Requested-With HTTP शीर्ष लेख को देखने के लिए अगर यह एक XHR अनुरोध है निर्धारित करने के लिए है। या एक्सएमएल के लिए Content-Type: text/xml अनुरोध हेडर।

मैं आपको सलाह देता हूं कि आप REST testing के लिए फ़ायरफ़ॉक्स प्लगइन स्थापित करें जो XHR अनुरोधों को अनुकरण करता है। टैपर डेटा प्लगइन और कुछ अन्य परीक्षण/डिबगिंग के लिए अधिक नियंत्रण की अनुमति देते हैं। WFetch एक सीधा अप कच्चा HTTP अनुरोध उपकरण है जो परीक्षण और डिबगिंग के लिए भी आवश्यक है।

मैंने ऐसा करने के लिए JSON/POX action filter लिखा है। आपको बस अपनी कक्षाओं या विधियों को [JsonPox] विशेषता के साथ सजाने की आवश्यकता है और क्लाइंट के आधार पर उन्हें स्वचालित रूप से JSON या XML के रूप में उजागर किया जाएगा।

+0

मैं सामग्री-प्रकार का उपयोग कर रहा हूं यह इंगित करने के लिए कि क्या उपयोगकर्ता Xml या Html चाहता है (जो आज मैं वास्तव में केवल एक्सएमएल का समर्थन करता हूं)। मैं अपने नियंत्रक को या तो एचटीएमएल या एक्सएमएल व्यू चुनने की योजना बना रहा हूं जो मॉडल को परिणाम में बदलने के लिए जिम्मेदार है। मुझे लगता है कि यह अच्छी तरह से काम करता है। प्रतिक्रिया और अतिरिक्त जानकारी के लिए धन्यवाद। – JoshBerke

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