从REST端点返回变化类型

时间:2015-07-06 15:54:54

标签: c# wcf rest wcf-rest

我正在使用单个PUT操作构建WCF REST服务。目的是通过添加或减去资金来更新帐户余额。 PUT操作可以做出两个主要响应:

  • 200 / OK。 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>,但这似乎是处理正常业务流程的一种尴尬方式。

思想?

1 个答案:

答案 0 :(得分:0)

我会通过在AccountUpdate类中包含Succeeded位和ErrorMessage字符串来处理此问题。此类似乎仅用于更新帐户,而不用于存储帐户数据。因此,返回AccountUpdate对象也应返回该更新的结果。您甚至可以让AccountUpdate包含&#34;结果&#34;包含所需数据的类。