के लिए अलग-अलग रिटर्न प्रकार मैं एएसपी.नेट एमवीसी 4 वेब एपीआई का उपयोग कर HTTP पर वास्तव में रीस्टफुल वेब सेवाओं को लिखने का प्रयास कर रहा हूं।एएसपी.नेट वेब एपीआई
मेरे पास वर्तमान स्थिति चुनौती है जो मेरे स्टेटस कोड के आधार पर अलग-अलग रिटर्न प्रकार (इकाई-बॉडी) को वापस करना है।
उदाहरण के लिए, संसाधन हैमर के लिए मैं एक नेट मॉडल वर्ग "हैमर", और एक HammerController है:
namespace Awesomeness
{
public class HammerController : ApiController
{
public Hammer Get(int id)
{
}
...
तो आईडी मौजूद नहीं है (404) या अलग प्राधिकरण (401) की आवश्यकता है, मैं आसानी से वापसी को शॉर्टकट कर सकता हूं और मैन्युअल रूप से स्टेटस कोड और किसी भी अन्य सामग्री को सेट कर सकता हूं, जो कि अच्छा है। हालांकि, कई गैर-2xx स्थितियों में, मैं हथौड़ा संसाधन प्रतिनिधित्व की तुलना में एक अलग इकाई-शरीर को वापस करना चाहता हूं। मैं इसे आसानी से मैन्युअल रूप से कर सकता हूं, लेकिन मैं अनुरोध हेडर के आधार पर एएसपी.नेट एमवीसी 4 वेब एपीआई ऑटोमैटिक सीरियलाइजेशन और एक्सएमएल या जेएसओएन से deserialization का लाभ लेना चाहता हूं।
तो मेरा मुख्य प्रश्न यह है: क्या मैं अलग-अलग रिटर्न प्रकार लौटाते समय एएसपी.नेट एमवीसी 4 वेब एपीआई के ऑटोमैजिक सीरियलाइजेशन का लाभ उठा सकता हूं?
कुछ संभावित दृष्टिकोण मैं बारे में सोचा है कर रहे हैं:
नियंत्रक विधि मुख्य संसाधन प्रकार वापसी है, लेकिन शॉर्ट सर्किट
HttpContext.Current.Response
और किसी भी तरह के साथ वापसी automagic क्रमबद्धता (पसंदीदा) में हुक।क्या मेरा मॉडल वर्ग सी यूनियन की तरह अधिक है जहां यह इस प्रकार या उस प्रकार का प्रतिनिधित्व करता है और इसे सामान्य रिटर्न प्रक्रिया के हिस्से के रूप में क्रमबद्ध करने देता है (और केवल स्थिति कोड और किसी भी प्रतिक्रिया शीर्षकों को ओवरराइड करें)। यहां तक कि यदि मुझे लगता है कि यह कैसे करना है, मुझे लगता है कि यह अभी भी बहुत हैकी होने वाला है।
संपादित अप्रैल 27 2012: मैं एक HttpResponseException इस तरह फेंक कर सकते हैं:
HttpResponseMessage response = new HttpResponseMessage(statusCode);
if (!string.IsNullOrWhiteSpace(text))
{
response.Content = new StringContent(text);
}
throw new HttpResponseException(response);
... लेकिन अब मैं यह पता लगाने की ऑटो जादू क्रमबद्धता में हुक और स्थापित करने के लिए कैसे की जरूरत है response.Content
Accept
हेडर वार्तालाप प्रतिनिधित्व के लिए।
संपादित करें के लिए धन्यवाद। मैं अपने स्थापित बीटा के साथ काम करने के लिए HttpResponseMessage प्राप्त करने के लिए पूरे दिन देख रहा था ... –
Max
क्यों HttpResponseMessage को 'प्रतिक्रिया बनाने' के लिए अधिभार नहीं है? –
@ सिमोन_वेवर - मैं अनुमान लगा रहा हूं क्योंकि आप HttpRequestMessage के जवाब में एक HttpResponseMessage बना रहे हैं, इसलिए यह प्रतिक्रिया देने के संदर्भ में संदर्भ के अनुरोध का उपयोग करता है। – MikeJansen