将选定的操作合同公开为 ReST 导致错误合同“IContract”的操作“方法名称”指定多个请求正文
Posted
技术标签:
【中文标题】将选定的操作合同公开为 ReST 导致错误合同“IContract”的操作“方法名称”指定多个请求正文【英文标题】:Exposing selected operation contracts as ReST causing error Operation 'method name' of contract 'IContract' specifies multiple request body 【发布时间】:2016-03-15 12:54:03 【问题描述】:这里是场景。有一个现有的服务合同,其中包含一些被桌面应用程序使用的方法。现在需要通过 ReST 暴露一些操作合约。但它要求将所有方法公开为 ReST。否则,如果参数被包装,下面的文本通常会出现异常。
真的很混乱。似乎是框架中的错误。
错误信息 -
合约“IService”的“SaveEntitiy”操作指定了多个要序列化的请求主体参数,而无需任何包装器元素。最多一个 body 参数可以在没有包装元素的情况下被序列化。删除额外的正文参数或将 WebGetAttribute/WebInvokeAttribute 上的 BodyStyle 属性设置为 Wrapped。
运营合同。
[ServiceContract]
public interface IService
[OperationContract] //No need to expose this as ReST
string SaveEntity(int id,string name);
[OperationContract]
[WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json)]
string GetData(int value);
如果我们将 SaveEntity 公开为 ReST,一切正常。表示配置正确。
【问题讨论】:
将 WebInvoke 更改为 WebGet 并指定 UriTemplate @Maximus,您是说 WebInvoke 不允许使用非 ReST 方法的问题吗?在我的实际代码中,我在同一个服务合同中有 POST 方法(操作合同)。在那里我无法避免 WebInvoke 【参考方案1】:当您尝试使用 GET 时,只需使用 WebGet 方法,如下所示:
[WebGet(UriTemplate = “GetData/input/value”)]
或者
您也可以尝试单独使用 [WebGet]。
【讨论】:
还有需要 WebInvoke 的 POST 方法以上是关于将选定的操作合同公开为 ReST 导致错误合同“IContract”的操作“方法名称”指定多个请求正文的主要内容,如果未能解决你的问题,请参考以下文章