具有抽象请求类型的WCF Rest方法 - 错误:无法创建抽象类

时间:2016-03-25 15:59:03

标签: c# wcf rest abstract

简而言之,我已经为我的WCF服务公开了一个REST-ful端点,如下所示:

<endpoint address="Rest" binding="webHttpBinding" behaviorConfiguration="web" contract="ServicesLayer.ServiceContract.IService" name="service-web" />

我已经将WebInvoke属性添加到服务接口上的所有方法,如下所示:

[WebInvoke]
[OperationContract]
Response GetStuff(RequestBase Request);

对于具有具体请求类型的方法,一切正常。但是对于任何具有抽象请求类型的方法,例如上面的 RequestBase 是抽象的方法,会返回以下错误:无法创建抽象类。

在调用RESTful时,如何强制此方法将请求解释为RequestBase的派生类型之一?

注意:我确实尝试从RequestBase类中删除'abstract'关键字,但它仍然被解释为RequestBase而不是其派生类之一,因此实际上并没有解决任何问题。

提前致谢。

2 个答案:

答案 0 :(得分:1)

对于那些想知道它在JSON中的外观的人。就我而言,我需要添加架构字符串。

此示例假定您具有一个抽象的BasePersonCriteria和一个继承PersonNameCriteria的{​​{1}}。我在BasePersonCriteria上也有一个属性[KnownType(typeof(PersonNameCriteria))]

如果这是您的要求和条件:

BasePersonCriteria

这是JSON的外观:

[DataContract(Namespace = "http://schemas.stackoverflow.com/core/persons/2018/11/14/criterias")]
public class PersonNameCriteria : BasePersonCriteria
{
    [DataMember]
    public string Name { get; set; }
}

[DataContract(Namespace = "http://schemas.stackoverflow.com/core/persons/2018/11/14/criterias")]
[KnownType(typeof(PersonNameCriteria))]
public abstract class BaseAccountCriteria
{
}

[DataContract(Namespace = "http://schemas.stackoverflow.com/core/persons/2018/11/14/requests")]
public class GetPersonRequest
{
    [DataMember(IsRequired = true)]
    public BasePersonCriteria PersonCriteria { get; set; }
}

答案 1 :(得分:0)

结果我只需要在发送的json / xml请求中包含类型。一旦我添加了新的哪种类型来解释它。感谢