[英]NSwag For ServiceStack
我想使用NSwag為基於 ServiceStack(SS) 的應用程序生成OpenApi v3 Spec 。 使用 SS,合約在 DTO 類型 class 中定義,而在另一個 class 中的實現使其完全解耦。
[Route("/hello", "GET", Summary = @"Default hello service.", Notes = "Longer description for hello services")]
[Route("/hello/{Name}", "GET", Summary = @"Additional hello service", Notes="Longer description for hello services")]
public class Hello : IReturn<HelloResponse>
{
[ApiMember(Name = "Name", Description = "Name Description",
ParameterType = "path", DataType = "string", IsRequired = true)]
[ApiAllowableValues("Name", typeof(string))]
public string Name { get; set; }
}
public class HelloResponse
{
public string Result { get; set; }
}
我需要為上面的代碼生成 Spec 文件。 我試圖將 class Hello
的類型傳遞給JsonSchemaGenerator
(通過遵循TypesToOpenApiCommand
代碼),它確實生成了規范文件,但只包含組件部分。
"{\"openapi\":\"3.0.0\",\"info\":{\"title\":\"Swagger specification\",\"version\":\"1.0.0\"},\"servers\":[{\"url\":\"http:///\"}],\"components\":{\"schemas\":{\"Hello\":{\"type\":\"object\",\"additionalProperties\":false,\"properties\":{\"Name\":{\"type\":\"string\",\"nullable\":true}}},\"HelloResponse\":{\"type\":\"object\",\"additionalProperties\":false,\"properties\":{\"Result\":{\"type\":\"string\",\"nullable\":true}}}}}}"
其他部分如paths
, parameters
未填寫。下面是我用於生成規范文件的代碼,
var modelAssemblies = LoadFromAssemblies
.Where(assembly => assembly.FullName != null && assembly.FullName.Contains(".ServiceModel"));
var types = modelAssemblies.SelectMany(a => a.GetTypes());
var document = CreateDocument();
var generatorSettings = new JsonSchemaGeneratorSettings {SchemaType = SchemaType.OpenApi3};
var generator = new JsonSchemaGenerator(generatorSettings);
var schemaResolver = new OpenApiSchemaResolver(document, generatorSettings);
foreach (var type in types)
{
generator.Generate(type, schemaResolver);
}
var json = document.ToJson();
var yaml = document.ToYaml();
return document;
我如何填寫這些部分? 我能得到一些關於如何推進我的要求的設計想法嗎?
有關訪問 ServiceStack 的HostContext.Metadata
以填充 Open API 規范的示例,請查看 ServiceStack 的OpenApiServices.cs 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.