私の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
)下の写真に示すように:
だが cancelResponse.Content
が存在せず(または、少なくとも、応答を他の何かにキャストする前にアクセスできません)、このContent
を読み取る/解析する方法がわかりません。何か案が?
応答オブジェクトを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;
}