我想使用NSwag为基于ServiceStack(SS)的应用程序生成OpenApi v3 Spec。对于SS,契约在DTO类型类中定义,而在另一个类中实现使其完全解耦。
[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文件。我尝试将类Hello的类型传递给JsonSchemaGenerator (通过遵循TypesToOpenApiCommand代码),它确实生成了specfile,但只包含组件部分。
"{\"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;我该如何填写这些部分?我能不能得到一些关于如何推进我的需求的设计思想?
发布于 2022-08-12 03:47:52
有关访问ServiceStack的HostContext.Metadata以填充Open规范的示例,请检查ServiceStack的OpenApiServices.cs。
https://stackoverflow.com/questions/73326974
复制相似问题