2016-02-10 11 views
6

मेरी एपीआई क्रियाओं में से एक में (PostOrder) I एपीआई (CancelOrder) में एक और कार्रवाई का उपभोग कर सकता है। दोनों एक JSON स्वरूपित ResultOrderDTO प्रकार, दोनों कार्यों के लिए एक ResponseTypeAttribute के रूप में स्थापित है, जो इस तरह दिखता है वापसी:OkNegotiatedContentResult से सामग्री को पढ़ने/विश्लेषण करने के लिए कैसे?

public class ResultOrderDTO 
{ 
    public int Id { get; set; } 
    public OrderStatus StatusCode { get; set; } 
    public string Status { get; set; } 
    public string Description { get; set; } 
    public string PaymentCode { get; set; } 
    public List<string> Issues { get; set; } 
} 

मैं क्या जरूरत है पढ़ रहा है/CancelOrder से ResultOrderDTO जवाब पार्स, ताकि मैं के लिए प्रतिक्रिया के रूप में उपयोग कर सकते हैं PostOrder

// Here I call CancelOrder, another action in the same controller 
var cancelResponse = CancelOrder(id, new CancelOrderDTO { Reason = CancelReason.Unpaid }); 

if (cancelResponse is OkNegotiatedContentResult<ResultOrderDTO>) 
{ 
    // Here I need to read the contents of the ResultOrderDTO 
} 
else if (cancelResponse is InternalServerErrorResult) 
{ 
    return ResponseMessage(Request.CreateResponse(HttpStatusCode.InternalServerError, new ResultError(ErrorCode.InternalServer))); 
} 

जब मैं डिबगर उपयोग करते हैं, मैं देख सकता हूँ कि ResultOrderDTO यह वहाँ कहीं है जवाब में (Content तरह दिखता है) के रूप में नीचे पिक में दिखाया गया है: इस तरह मेरे PostOrder कोड दिखता है:

Debugger

लेकिन cancelResponse.Content मौजूद नहीं है (या इससे पहले कि मैं कुछ और करने के लिए मेरी प्रतिक्रिया डाली कम से कम मैं यह करने के लिए पहुँच नहीं है) और मैं कैसे पढ़ा/इसपार्स करने के लिए के बारे में पता नहीं है 210। कोई उपाय?

उत्तर

8

बस प्रतिक्रिया ऑब्जेक्ट को OkNegotiatedContentResult<T> पर डाला। सामग्री प्रॉपर्टी टाइप टी का ऑब्जेक्ट है। जो आपके मामले में ResultOrderDTO का ऑब्जेक्ट है।

if (cancelResponse is OkNegotiatedContentResult<ResultOrderDTO>) 
{ 
    // Here's how you can do it. 
    var result = cancelResponse as OkNegotiatedContentResult<ResultOrderDTO>; 
    var content = result.Content; 
} 
+0

विश्वास नहीं कर सकता कि मैंने यह कोशिश नहीं की। धन्यवाद। – Antrim

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

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