Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从REST端点返回不同的类型_C#_Wcf_Rest_Wcf Rest - Fatal编程技术网

C# 从REST端点返回不同的类型

C# 从REST端点返回不同的类型,c#,wcf,rest,wcf-rest,C#,Wcf,Rest,Wcf Rest,我正在构建一个WCF REST服务,使用一个PUT操作。目的是通过增加或减少资金来更新账户余额。PUT操作可以做出两个主要响应: 200/好。AccountUpdate对象被序列化回调用者,调用者包含新的帐户余额信息 409/冲突。一个AccountError对象被序列化回调用者,调用者指出问题所在(通常是一条“accountoverdrawn”消息) 以上是客户机对返回值的期望。如果这是ASP.NETWebAPI,那么该服务将很容易实现 然而,对于WCFREST,我不确定如何为同一个服务操

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

  • 200/好。
    AccountUpdate
    对象被序列化回调用者,调用者包含新的帐户余额信息
  • 409/冲突。一个
    AccountError
    对象被序列化回调用者,调用者指出问题所在(通常是一条“accountoverdrawn”消息)
以上是客户机对返回值的期望。如果这是ASP.NETWebAPI,那么该服务将很容易实现

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

    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(...);
        }
    } 
上面的代码不会编译,因为
AccountError
AccountUpdate
不是多态的

有没有合适的惯用方法来处理WCF REST的这种情况?我是否应该让我的服务操作简单地返回
对象

我可以解决这个问题的一种方法是抛出新的WebFaultException,但这似乎是处理正常业务流的一种笨拙方法


想法?

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

您可能对HttpResponseMessage感兴趣。