【问题标题】:Return Varying Type from REST Endpoint从 REST 端点返回不同的类型
【发布时间】:2015-09-23 20:43:50
【问题描述】:

我正在使用单个 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>,但这似乎是处理正常业务流程的尴尬方式。

想法?

【问题讨论】:

  • 您可能对 HttpResponseMessage 感兴趣。

标签: c# wcf rest wcf-rest


【解决方案1】:

我将通过在您的 AccountUpdate 类中合并一个成功位和错误消息字符串来处理这个问题。此类看起来仅用于更新帐户,而不是存储帐户数据。因此,返回 AccountUpdate 对象也应该返回该更新的结果。您甚至可以让 AccountUpdate 包含一个包含所需数据的“结果”类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-25
    • 2017-03-11
    • 1970-01-01
    • 2017-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多