यदि WCF REST कॉल में कुछ गलत हो जाता है, जैसे कि अनुरोधित संसाधन नहीं मिला है, तो मैं अपने ऑपरेशनकॉन्ट्रैक्ट पद्धति में HTTP प्रतिक्रिया कोड (इसे HTTP 404 जैसी किसी चीज़ के लिए सेट करना) के साथ कैसे खेल सकता हूं?
यदि WCF REST कॉल में कुछ गलत हो जाता है, जैसे कि अनुरोधित संसाधन नहीं मिला है, तो मैं अपने ऑपरेशनकॉन्ट्रैक्ट पद्धति में HTTP प्रतिक्रिया कोड (इसे HTTP 404 जैसी किसी चीज़ के लिए सेट करना) के साथ कैसे खेल सकता हूं?
जवाबों:
एक WebOperationContext
ऐसा तरीका है जिसे आप एक्सेस कर सकते हैं और इसमें एक OutgoingResponse
प्रकार की संपत्ति होती है OutgoingWebResponseContext
जिसमें एक StatusCode
संपत्ति होती है जिसे सेट किया जा सकता है।
WebOperationContext ctx = WebOperationContext.Current;
ctx.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.OK;
WebFaultException
हालाँकि, फेंकना काम करने लगता है।
यदि आपको एक कारण निकाय वापस करने की आवश्यकता है, तो WebFaultException पर एक नज़र डालें
उदाहरण के लिए
throw new WebFaultException<string>("Bar wasn't Foo'd", HttpStatusCode.BadRequest );
WebFaultException
इसे वापस करने के लिए फेंक देंगे HttpStatusCode.Created
?
404 के लिए WebOperationContext.Current.OutgoingResponse पर SetStatusAsNotFound (स्ट्रिंग संदेश) नामक एक अंतर्निहित विधि है जो स्टेटस कोड को 404 पर सेट करेगा और एक कॉल के लिए एक स्टेटस विवरण।
ध्यान दें, वहाँ भी है, SetStatusAsCreated (उड़ी स्थान) जो 201 कोड की स्थिति और एक हेडर के साथ स्थान हेडर सेट करेगा।
यदि आप शीर्ष लेख में स्थिति का विवरण देखना चाहते हैं, तो REST पद्धति को नीचे दिए गए तरीके से पकड़ने () खंड से अशक्त वापसी सुनिश्चित करनी चाहिए:
catch (ArgumentException ex)
{
WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.InternalServerError;
WebOperationContext.Current.OutgoingResponse.StatusDescription = ex.Message;
return null;
}
आप WebOperationContext के StatusCode और StatusDescription के साथ एक स्थिति और कारण निकाय भी लौटा सकते हैं :
WebOperationContext context = WebOperationContext.Current;
context.OutgoingResponse.StatusCode = HttpStatusCode.OK;
context.OutgoingResponse.StatusDescription = "Your Message";
WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.Unauthorized;
throw new WebException("令牌码不正确", new InvalidTokenException());
यह मेरे लिए WCF डेटा सेवाओं के लिए काम नहीं किया। इसके बजाय, आप डेटा सेवा के मामले में डेटा सेवा का उपयोग कर सकते हैं। निम्न पोस्ट उपयोगी पाया। http://social.msdn.microsoft.com/Forums/en/adodotnetdataservices/thread/f0cbab98-fcd7-4248-af81-5f74b019d8de