从REST端点返回可变类型

本文关键字:类型 返回 REST 端点 | 更新日期: 2023-09-27 18:01:25

我正在用一个PUT操作构造一个WCF REST服务。其目的是通过增加或减少资金来更新帐户余额。PUT操作可以做出两种主要响应:

  • 200/好的。AccountUpdate对象被序列化回调用方,其中包含新的帐户余额信息。
  • 409/冲突。一个AccountError对象被序列化回给调用者,它指出问题(通常是一个"帐户透支"消息)。

以上是客户端期望的返回值。如果这是ASP。. NET Web API,此服务将很容易实现。

然而,对于WCF REST,我不确定如何为相同的服务操作提供两种不同的返回类型。下面是示例代码:

    public AccountUpdate PutSomething([Safe] Funding funding)
    {
        if (HandleFunds(funding)){
          //**** Handle a 200 "OK" ****
          return new AccountUpdate(...);
        }else{
          //**** Handle a 409 "Conflict" ****
          OutgoingWebResponseContext response = WebOperationContext.Current.OutgoingResponse;
          response.StatusCode = HttpStatusCode.Conflict;
          return new AccountError(...);
        }
    } 

以上代码无法编译,因为AccountErrorAccountUpdate不是多态的。

是否有一个合适的惯用方法来处理这个场景与WCF REST?我应该让我的服务操作简单地返回object吗?

我可以解决这个问题的一种方法是做一个throw new WebFaultException<AccountError>,但这似乎是一个尴尬的方式来处理一个正常的业务流程。

想法吗?

从REST端点返回可变类型

我将通过在您的accountuupdate类中合并成功位和ErrorMessage字符串来处理此问题。这个类看起来只用于更新帐户,而不用于存储帐户数据。因此,返回accountuupdate对象也应该返回该更新的结果。您甚至可以让accountuupdate包含一个"Result"类,其中包含您想要的数据。