使用ASP.NET Core Web API在Swashbuckle 6(Swagger)中重命名模型

时间:2016-11-16 23:18:13

标签: asp.net-core swagger swashbuckle asp.net-core-webapi

我使用Swashbuckle 6(Swagger)和ASP.NET Core Web API。我的模型将DTO作为后缀,例如,

public class TestDTO {
    public int Code { get; set; }
    public string Message { get; set; }
}

如何将其重命名为"测试"在生成的文档中?我尝试使用名称添加DataContract属性,但这并没有帮助。

[HttpGet]
public IActionResult Get() {
  //... create List<TestDTO>
  return Ok(list);
}

2 个答案:

答案 0 :(得分:6)

想出来......类似于答案:Swashbuckle rename Data Type in Model

唯一的区别是该属性现在称为CustomSchemaIds而不是SchemaId:

options.CustomSchemaIds(schemaIdStrategy);

我没有查看DataContract属性,只是删除了&#34; DTO&#34;:

private static string schemaIdStrategy(Type currentClass) {
    string returnedValue = currentClass.Name;
    if (returnedValue.EndsWith("DTO"))
        returnedValue = returnedValue.Replace("DTO", string.Empty);
    return returnedValue;
}

答案 1 :(得分:0)

@ultravelocity 的回答对我来说不太适用。错误就像“'Response`1'已经被使用”。我不知道确切的原因是什么,但我想这与继承/泛型有关(因为我返回了分页响应)。

基于@ultravelocity 的问答,我为 .net 5(可能也适用于 asp.net core 2.c/3.d)开发了一个可能的解决方案来解决这个问题。

步骤:

  1. 像@ultravelocity 一样添加 customSchemaId-Strategy
a.CustomSchemaIds(schemaIdStrategy);
  1. 添加您的自定义策略功能
private static string schemaIdStrategy(Type currentClass)
{
    string customSuffix = "Response";
    var tmpDisplayName = currentClass.ShortDisplayName().Replace("<", "").Replace(">", "");
    var removedSuffix = tmpDisplayName.EndsWith(customSuffix) ? tmpDisplayName.Substring(0, tmpDisplayName.Length - customSuffix.Length) : tmpDisplayName;
    return removedSuffix;
}