簡體   English   中英

ServiceStack 的 NSwag

[英]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}}}}}}"

其他部分如pathsparameters未填寫。下面是我用於生成規范文件的代碼,

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM