微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何更改自动生成的 WCF 合同,该合同在更新服务合同后仍然存在?

如何解决如何更改自动生成的 WCF 合同,该合同在更新服务合同后仍然存在?

我正在编写一个代理来使用 ASP.net Core 包装 WCF 服务,这是我第一次使用 ASP.Net Core。

我使用的是自动生成的 WCF 服务合同,问题是我的 WCF 服务经常更改,所以我必须更新/刷新 WCF 服务,并且每当我更新我的合同时,我都会丢失我的小调整。

我只是想:

  • 隐藏一些属性 - viapublic string Property 更改为 internal string Property。我试过 [IgnoreDataMember][JsonIgnore],但它们似乎不起作用
  • 需要一些属性 - via requiredAttribute
  • 认一些属性值 - via DefaultValueAttribute

到目前为止,我已经尝试了两种方法,但都没有完全奏效。

这代表自动生成的 WCF 合同,我想在其中要求和MyProperty1 并隐藏 MyProperty2

// This is the automatically generated WCF Contract
public partial class MyClass
{
    private string myPropertyField1;
    private string myPropertyField2;

    public string MyProperty1
    {
        get { return this.myPropertyField1; }
        set { this.myPropertyField1 = value; }
    }
    public string MyProperty2
    {
        get { return this.myPropertyField2; }
        set { this.myPropertyField2 = value; }
    }
}

方法一:

ModelMetadataType 覆盖合约元数据。这部分有效,但由于某种原因不适用于所有属性?感觉像个bug。

[ModelMetadataType(typeof(MyClassMetadata))]
public partial class MyClass { }

public partial class MyClassMetadata
{
    [required]                      // This does not work
    [DefaultValue("SomeValue")]     // This DOES work?
    public string MyProperty1 { get; set; } // I want this required & defaulted

    [IgnoreDataMember]              // This does not work to hide
    [JsonIgnore]                    // This does not work to hide
    public string MyProperty2 { get; set; } // I want this hidden from Swagger view
}

哪个适用于认值,但似乎没有使其成为必需或隐藏?

方法 2:

我尝试创建派生类,然后使用派生类代替 MyClass 作为控制器 api 参数,但是当我尝试调用它时,我收到一个错误内容类似于 Type MyClassDerived is没想到。使用 XmlInclude 指定意外类型...

public partial class MyClassDerived : MyClass
{
    [required]                          // This puts "*" next to it in Swagger
    [DefaultValue("SomeValue")]         // This defaults the value in Swagger
    public new string MyProperty1
    {
        get { return base.MyProperty1; }
        set { base.MyProperty1 = value; }
    }
    internal new string MyProperty2     // This works to hide from Swagger
    {
        get { return base.MyProperty2; }
        set { base.MyProperty2 = value; }
    }
}

如何在不直接修改自动生成的 WCF 合同服务类的情况下隐藏/认/要求合同属性

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。