【问题标题】:WCF Rest Method with abstract request type - Error: Cannot create an abstract class具有抽象请求类型的 WCF Rest 方法 - 错误:无法创建抽象类
【发布时间】:2016-03-25 15:59:02
【问题描述】:

简而言之,我为我的 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 为抽象的方法,都会返回以下错误:无法创建抽象类。

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

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

提前致谢。

【问题讨论】:

    标签: c# wcf rest abstract


    【解决方案1】:

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

    本示例假设您有一个抽象的 BasePersonCriteria,以及继承 BasePersonCriteriaPersonNameCriteria。我在BasePersonCriteria 上还有一个属性[KnownType(typeof(PersonNameCriteria))]

    如果这是您的要求和标准:

    [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; }
    }
    

    这就是 JSON 的外观:

    {
        "PersonCriteria": {
            "__type": "PersonNameCriteria:http://schemas.stackoverflow.com/core/persons/2018/11/14/criterias",
            "Name": "John"
        }
    }
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-10
        • 1970-01-01
        • 2021-12-29
        • 2011-07-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多