2016-02-10 14 views
6

In una delle mie azioni API (PostOrder) I può consumare un'altra azione nell'API (CancelOrder). Entrambi restituiscono un JSON formattato ResultOrderDTO tipo, impostato come un ResponseTypeAttribute per entrambe le azioni, che assomiglia a questo:Come leggere/analizzare il contenuto da 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; } 
} 

cosa ho bisogno è la lettura/l'analisi della risposta ResultOrderDTO da CancelOrder, in modo che posso usarlo come risposta per PostOrder. Questo è ciò che il mio codice PostOrder assomiglia:

// 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))); 
} 

Quando uso il debugger, posso vedere che il ResultOrderDTO è lì qualche parte nella risposta (sembra la Content), come mostrato nella foto qui sotto:

Debugger

ma cancelResponse.Content non esiste (o almeno io non hanno accesso ad esso, prima ho lanciato la mia risposta a qualcos'altro) e non ho idea di come leggere/analizzare questo Content. Qualche idea?

risposta

8

Basta trasmettere l'oggetto risposta a OkNegotiatedContentResult<T>. La proprietà Content è l'oggetto di tipo T. che nel tuo caso è oggetto di ResultOrderDTO.

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

Non posso credere di non averlo provato. Grazie. – Antrim

Problemi correlati