2016-02-10 15 views
6

Trong một trong các hành động API của tôi (PostOrder) I có thể đang sử dụng một hành động khác trong API (CancelOrder). Cả hai trở về một JSON định dạng ResultOrderDTO loại, thiết lập như là một ResponseTypeAttribute cho cả hành động, trông như thế này:Cách đọc/phân tích Nội dung từ 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; } 
} 

Những gì tôi cần được đọc/phân tích cú pháp ResultOrderDTO phản hồi từ CancelOrder, vì vậy mà tôi có thể sử dụng nó như là câu trả lời cho PostOrder. Đây là những gì đang PostOrder của tôi trông giống như:

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

Khi tôi sử dụng trình gỡ lỗi, tôi có thể thấy rằng ResultOrderDTO nó là có đâu đó trong phản ứng (trông giống như Content) như trong pic dưới đây:

Debugger

nhưng cancelResponse.Content không tồn tại (hoặc ít nhất là tôi không có quyền truy cập vào nó trước khi tôi đúc phản ứng của tôi để cái gì khác) và tôi không có ý tưởng về làm thế nào để đọc/phân tíchnày 210. Bất kỳ ý tưởng?

Trả lời

8

Chỉ cần truyền đối tượng phản hồi tới OkNegotiatedContentResult<T>. Thuộc tính Nội dung là đối tượng của loại T. trong trường hợp của bạn là đối tượng của ResultOrderDTO.

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

Không thể tin rằng tôi đã không thử điều này. Cảm ơn. – Antrim

Các vấn đề liên quan