[C#] गैर-ठीक प्रतिक्रिया के लिए IHttpActionResult के साथ सामग्री लौटें



Answers

आप HttpRequestMessagesExtensions.CreateErrorResponse ( System.Net.Http नामस्थान) का उपयोग कर सकते हैं, जैसे:

public IHttpActionResult Get()
{
   return ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "Message describing the error here"));
}

वेब एपीआई की सामग्री वार्ता का लाभ उठाने के अनुरोध के आधार पर प्रतिक्रियाएं बनाना बेहतर है।

Question

एक वेब एपीआई 2 नियंत्रक से लौटने के लिए, अगर प्रतिक्रिया ठीक है (स्थिति 200) इस तरह की प्रतिक्रिया के साथ सामग्री वापस कर सकते हैं:

    public IHttpActionResult Get()
    {
        string myResult = ...
        return Ok(myResult);
    }

यदि संभव हो, तो मैं यहां संभवतः अंतर्निहित परिणाम प्रकारों का उपयोग करना चाहता हूं: https://msdn.microsoft.com/en-us/library/system.web.http.results(v=vs.118).aspx

मेरा सवाल है, एक और प्रकार की प्रतिक्रिया के लिए (200 नहीं), मैं इसके साथ एक संदेश (स्ट्रिंग) कैसे वापस कर सकता हूं? उदाहरण के लिए, मैं यह कर सकता हूं:

    public IHttpActionResult Get()
    {
       return InternalServerError();
    }

लेकिन यह नहीं:

    public IHttpActionResult Get()
    {
       return InternalServerError("Message describing the error here");
    }

आदर्श रूप से मैं इसे सामान्यीकृत करना चाहता हूं ताकि मैं IHttpActionResult के किसी भी कार्यान्वयन के साथ एक संदेश वापस भेज सकूं।

क्या मुझे ऐसा करने की ज़रूरत है (और अपना खुद का प्रतिक्रिया संदेश बनाएं):

    public IHttpActionResult Get()
    {
       HttpResponseMessage responseMessage = ...
       return ResponseMessage(responseMessage);
    }

या कोई बेहतर तरीका है?




आप यह भी कर सकते हैं:

return InternalServerError(new Exception("SOME CUSTOM MESSAGE"));



देर से उत्तर के लिए खेद है कि आप सरल उपयोग क्यों नहीं करते हैं

return BadRequest("your message");

मैं इसे अपने सभी IHttpActionResult त्रुटियों के लिए उपयोग करता हूं, यह अच्छी तरह से काम कर रहा है

यहां प्रलेखन है: https://msdn.microsoft.com/en-us/library/system.web.http.apicontroller.badrequest(v=vs.118).aspx




अपवादों के लिए, मैं आमतौर पर करता हूं

 catch (Exception ex)
        {
            return InternalServerError(new ApplicationException("Something went wrong in this request. internal exception: " + ex.Message));
        }



यह उत्तर स्ट्रिंग के बजाय असली वस्तु के साथ, शमील यकुपोव उत्तर पर आधारित है।

using System.Dynamic;

dynamic response = new ExpandoObject();
response.message = "Email address already exist";

return Content<object>(HttpStatusCode.BadRequest, response);



एएसपी.नेट वेब एपीआई 2 में, आप किसी ResponseMessage में किसी भी ResponseMessage संदेश को लपेट सकते हैं:

public IHttpActionResult Get()
{
   HttpResponseMessage responseMessage = ...
   return new ResponseMessageResult(responseMessage);
}

कुछ मामलों में यह वांछित परिणाम प्राप्त करने का सबसे आसान तरीका हो सकता है, हालांकि आमतौर पर https://msdn.microsoft.com/en-us/library/system.web.http.results(v=vs.118).aspx में विभिन्न परिणामों का उपयोग करना बेहतर हो सकता है।






Links