web-dev-qa-db-ja.com

OkNegotiatedContentResultからコンテンツを読み取る/解析する方法は?

私のAPIアクションの1つ(PostOrder)で、私mayがAPI(CancelOrder)で別のアクションを消費しています。どちらもJSON形式のResultOrderDTO型を返し、両方のアクションに対してResponseTypeAttributeとして設定されます。これは次のようになります。

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

必要なのは、ResultOrderDTOからのCancelOrder応答を読み取り/解析して、PostOrderの応答として使用できるようにすることです。これは私の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)下の写真に示すように:

Debugger

だが cancelResponse.Contentが存在せず(または、少なくとも、応答を他の何かにキャストする前にアクセスできません)、このContentを読み取る/解析する方法がわかりません。何か案が?

12
Antrim

応答オブジェクトをOkNegotiatedContentResult<T>にキャストするだけです。 ContentプロパティはタイプTのオブジェクトであり、あなたの場合はResultOrderDTOのオブジェクトです。

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