如何解决如何更改自动生成的 WCF 合同,该合同在更新服务合同后仍然存在?
我正在编写一个代理来使用 ASP.net Core 包装 WCF 服务,这是我第一次使用 ASP.Net Core。
我使用的是自动生成的 WCF 服务合同,问题是我的 WCF 服务经常更改,所以我必须更新/刷新 WCF 服务,并且每当我更新我的合同时,我都会丢失我的小调整。
我只是想:
- 隐藏一些属性 - via 将
public 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 举报,一经查实,本站将立刻删除。