【问题标题】:c#, web api, swashbuckler/swaggerc#, web api, swashbuckler/swagger
【发布时间】:2016-04-27 23:30:49
【问题描述】:

这是我的第一个 web api,第一个 web 应用程序,也是我第一次通过 swashbuckler 使用 swagger。 我正在为我的设备数据库表使用 TPH。
例如,我有一个名为设备的基类,其中有几个从设备继承的子类。 (这不是真正的代码,所以我没有公开所有的公众等)
正如我所期望的那样,当我在浏览器中运行 swagger 时,模型描述只返回设备类的模型
我已经用谷歌搜索了如何显示所有可能的模型,但无法理解回复,因为它们与 c# 或使用 cmets 文档的 api 控制器无关,或者它们是为比我更了解这一点的人编写的。 有没有人可以发布一个例子,或者请给我一个初学者教程,关于如何让所有可能的模型大摇大摆。我不得不编写几个不同的 api 调用来解决这个问题,只是为了显示模型。
谢谢

class equipment
{
  public int id{get;set;}
  public int foo{get;set;}
  public int bar{get;set;}
}

class bucket : equipment
{      
  public int booboo{get;set;}
}
class mop : equipment
{
  public int lala{get;set;}
}


// equipmentcontroller class get function

/// <summary>
/// Returns a piece of equipment.<br/>
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[Route(@"{id:int}"), ResponseType(typeof(equipment))]
public IHttpActionResult GetMop(int id)
{
  return result != null ? (IHttpActionResult)Ok(GetMop[id]) : NotFound();
}

【问题讨论】:

  • 在网络上公开接口和继承是一个坏主意(更糟糕的是公开你的数据库实体),没有任何形式的松散耦合序列化程序支持它没有自定义黑客(例如 wcf 或 json 自定义类型) 例如,想想您在 xsd 中如何描述它。我见过的所有项目最终都退出了。
  • 它叫做 Swashbuckle,而不是 Swashbuckler。最后没有R。

标签: rest asp.net-web-api2 swagger tph


【解决方案1】:

您的建议是不可能的。在 Swagger 中,对操作的响应定义基本上是不同 HTTP 状态码到特定响应对象的映射。 (看看http://swagger.io/specification/#responsesObject

您不可能表示操作的 200 OK 可以返回表示拖把的响应或表示桶的响应。

您提到“我必须编写几个不同的 api 调用来解决这个问题,以便显示模型。”,这是我对 RESTful API 的期望。不同类型的资源由不同的端点处理。

【讨论】:

  • 感谢 Ruiaidhri。如果我的所有 3 个类(例如刀、叉、勺子)都是从 BaseClass(餐具)继承的,最好的做法是有 3 个 api 调用 GetKnife(id)、GetFork(id)、GetSpoon(id) 还是只有一个 api GetCutlery(id) 并在响应中有一个 Cutlery.CutleryType 字段?我认为拥有单个函数会使它更通用,但考虑一下添加更多类可能会破坏用户代码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-01
  • 1970-01-01
  • 2020-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-02
相关资源
最近更新 更多