2008-09-26 14 views
75

यदि डब्ल्यूसीएफ आरईएसटी कॉल में कुछ गलत हो जाता है, जैसे अनुरोधित संसाधन नहीं मिला है, तो मैं अपने ऑपरेशन कंट्रैक्ट विधि में HTTP प्रतिक्रिया कोड (उदाहरण के लिए HTTP 404 जैसे कुछ को सेट कर सकता हूं) के साथ कैसे खेल सकता हूं?मैं डब्लूसीएफ आरईएसटी विधि से कस्टम HTTP स्टेटस कोड कैसे वापस कर सकता हूं?

+0

ठीक यह सब मानते हैं नियंत्रण के लिए जवाब आपकी सेवा कार्यान्वयन में अपना स्थान बनाया। क्या होगा यदि वे कुछ पूरी तरह अमान्य यूरी पास करते हैं? आप अपनी सेवा में सभी अप्रत्याशित हिट के लिए 404 प्रदान करने का अनुमान कैसे लगा रहे हैं? –

उत्तर

96

एक WebOperationContext है कि आप उपयोग कर सकते हैं नहीं है और यह प्रकार OutgoingWebResponseContext के OutgoingResponse संपत्ति जो एक StatusCode संपत्ति सेट किया जा सकता है कि नहीं है।

WebOperationContext ctx = WebOperationContext.Current; 
ctx.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.OK; 
+3

क्या यह डब्ल्यूसीएफ डाटा सर्विसेज - सर्विस ऑपरेशंस के अंदर काम करता है? मुझे भाग्य नहीं मिला है, ऐसा लगता है कि स्टेटसकोड I सेट किसी और चीज से फंस जाता है। तो सभी HTTP पोस्ट अनुरोधों पर, मुझे 204 वापस मिलते हैं चाहे मैं इसे 201 पर सेट करता हूं, आदि। – RyBolt

+1

मेरे मामले में काम नहीं करता है, स्थिति अधिलेखित हो जाती है। हालांकि, 'WebFaultException' को फेंकना, काम करता प्रतीत होता है। –

23

404 के लिए वहाँ एक WebOperationContext.Current.OutgoingResponseSetStatusAsNotFound (स्ट्रिंग संदेश) कि 404 के लिए स्थिति कोड और एक कॉल के साथ एक स्थिति वर्णन सेट हो जाएगा कहा जाता है पर विधि में बनाया गया है।

नोट भी है, SetStatusAsCreated (उरी स्थान) जो स्टेटस कोड 201 पर और एक कॉल के साथ स्थान शीर्षलेख सेट करेगा।

+0

क्या यह स्वीकृत उत्तर में प्रदर्शित विधि से अधिक है? – crush

58

आप एक कारण शरीर वापस जाने के लिए की जरूरत है तो उदाहरण के लिए WebFaultException

पर एक नज़र

throw new WebFaultException<string>("Bar wasn't Foo'd", HttpStatusCode.BadRequest); 
+2

मुझे स्वीकार्य एक से बेहतर यह पसंद है क्योंकि हम स्थिर वेबऑपरेशन कॉन्टेक्स्ट का उपयोग नहीं कर रहे हैं। वर्तमान –

+0

ध्यान रखें कि यह केवल फ़ेमवर्क 4 के बाद से मान्य है http://msdn.microsoft.com/en-us/library/dd989924.aspx – sebagomez

+0

हम्म, .NET 4.5.1 में यह मेरे लिए स्टेटस कोड सेट नहीं कर रहा है, मुझे अभी भी 200 मिल रहा है। मैं जेसनपी का उपयोग कर रहा हूं, यह मेरी कॉलबैक (जावास्क्रिप्ट में) को कॉल कर रहा है और मेरा संदेश और मेरा स्टेटस कोड पास कर रहा है पूर्णांक। – Shavais

2

आप शीर्ष लेख में स्थिति विवरण देखने के लिए चाहते हैं, तो बाकी विधि वापस जाने के लिए यह सुनिश्चित करना चाहिये है कैच() सेक्शन नीचे से नीचे:

catch (ArgumentException ex) 
{ 
    WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.InternalServerError; 
    WebOperationContext.Current.OutgoingResponse.StatusDescription = ex.Message; 
    return null; 
} 
+1

यह मेरे लिए काम नहीं करता है, मुझे अभी भी 200 मिलते हैं। मैं crossHomainScriptAccessEnabled = "true" के साथ WebHttp बाइंडिंग का उपयोग कर रहा हूं और वेबएचटीपी का अंत बिंदु व्यवहार लपेटने की डिफ़ॉल्ट बॉडी स्टाइल और जेसन के डिफ़ॉल्ट आउटगोइंग प्रतिक्रिया प्रारूप के साथ कर रहा हूं। लेकिन इससे कोई फर्क नहीं पड़ता, क्या यह चाहिए? – Shavais

0

यह डब्ल्यूसीएफ डेटा सेवाओं के लिए मेरे लिए काम नहीं करता है। इसके बजाय, आप डेटा सेवाओं के मामले में DataServiceException का उपयोग कर सकते हैं। निम्नलिखित पोस्ट उपयोगी पाया। http://social.msdn.microsoft.com/Forums/en/adodotnetdataservices/thread/f0cbab98-fcd7-4248-af81-5f74b019d8de

+0

यह मेरे लिए काम नहीं करता है, मुझे कोई अन्य उपयोगी जानकारी नहीं है, और कोई प्रतिक्रिया शरीर नहीं है, मुझे 400 खराब अनुरोध मिलता है। – Shavais

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