0

情况:

  • 在 Web API 控制器中的服务器端,我得到了一个模型类,让我们调用它MyNamespace.MyData,除了属性之外,它还具有诸如bool CanEditThis()方法之类的业务逻辑功能。
  • 使用 Visual Studio 2017,我使用“添加”->“REST API 客户端”生成客户端代码以调用 Web API 方法并返回数据,但这会生成一个新的模型类,如ClientNamespace.MyData客户端(没有函数),而不是检测已经有一个可用的模型类MyNamespace.MyData(带有功能)。
  • 服务器端使用的模型类在他们自己的项目中定义,并在客户端和服务器端代码的 DLL 中可用(将此设置用于 WCF,但希望通过 Web API 实现新功能)。

如何在两端使用相同的模型类?

添加到 swagger/OpenAPI 定义中的任何神奇属性,以便 AutoREST 生成的代码知道重用类模型而不是创建新的?

或者我是否必须在 a)MyData在服务器端和客户端项目中复制部分类的代码或 b) 具有将返回的转换为的实用程序函数之间进行IList<ClientNamespace.MyData>选择IList<MyNamespace.MyData>

4

1 回答 1

-1

到目前为止我能想象的最好的解决方案:

服务器端模型类MyNamespace.MyData获取静态方法:

public static bool GetCanEditThis(arg) {...}

加上一个被 Web API/swagger 忽略的 getter 方法:

[JsonIgnore] public bool CanEditThis { get { return CanEditThis(this.arg) } }

客户端模型类ClientNamespace.MyData获得一个带有部分类的单独文件,以扩展自动生成的类,其中包含:

public bool CanEditThis { get { return MyNamespace.MyData.CanEditThis(this.arg) } }

这样,业务逻辑只编写一次,两个模型类只需要调用相同的方法,并将它们自己的属性作为参数,因为业务逻辑函数无法访问实际数据。

于 2018-02-26T08:30:11.803 回答