C# Asp.NETCore中的Swagger可以为非MVC控制器的类生成文档吗

C# Asp.NETCore中的Swagger可以为非MVC控制器的类生成文档吗,c#,swagger,asp.net-core-2.0,swashbuckle,C#,Swagger,Asp.net Core 2.0,Swashbuckle,我一直在寻找这方面的线索,但运气不好。 看起来mvc core 2停止使用IApiExplorer,我可以找到一些例子,所以我不确定从哪里开始 在我的核心asp.net api应用程序中,我有处理许多api调用的通用处理程序。所以,我需要从表示api查询和命令的类生成swagger文档,而不是读取MVC控制器的属性 我的类由如下自定义属性修饰(简化): 其中属性定义为: [AttributeUsage(AttributeTargets.Class)] public class ApiDriver

我一直在寻找这方面的线索,但运气不好。 看起来mvc core 2停止使用IApiExplorer,我可以找到一些例子,所以我不确定从哪里开始

在我的核心asp.net api应用程序中,我有处理许多api调用的通用处理程序。所以,我需要从表示api查询和命令的类生成swagger文档,而不是读取MVC控制器的属性

我的类由如下自定义属性修饰(简化):

其中属性定义为:

[AttributeUsage(AttributeTargets.Class)]
public class ApiDriverAttribute: Attribute
{
    public ApiDriverAttribute(string apiName, ApiType apiType, ApiHttpMethod httpMethod)
    {
        ApiName = apiName;
        ApiType = apiType;
        ApiHttpMethod = httpMethod;
    }

    public string ApiName { get; set; }
    public ApiType ApiType { get; set; }
    public ApiHttpMethod ApiHttpMethod { get; set; }
}


public enum ApiType { Command, Query}
public enum ApiHttpMethod { Post, Get }
所以我需要大摇大摆地瞄准(或者我需要提供关于)以这种方式属性化的类,而不是去MVC控制器


非常感谢

以下是我将模型注入文档的方式:

private class ApplyDocumentVendorExtensions : IDocumentFilter
{
    public void Apply(SwaggerDocument sd, SchemaRegistry sr, IApiExplorer ae)
    {
        sr.GetOrRegister(typeof(ExtraType));
        //sr.GetOrRegister(typeof(BigClass));        
    }
}
下面是GitHub上的完整代码


这对你们来说可能有点不同,因为我不是net core

我现在已经集成了这个问题的答案,请参见RoutableDtoSwaggerGenerator类

答案相对简单。我必须创建IDocumentFilter的实现,并从我自己的路由存储库中填充swagger文档路径、操作、参数和响应

然后我所要做的就是在StartUp的整体Swagggen注册中注册我的过滤器


希望这有助于某人并节省一些时间。

该类(
MyQueryClass
)看起来像一个模型,您可以将模型添加到swagger文档中,看看这里:\这就是您要找的吗?嗯,也许吧。MyQueryClass不仅仅是一个模型。它还定义了路由,即在上面的例子中,它将是api/query/GetSomeResult?myProperty=SomeStringValue。它还定义了它支持的HTTP方法。您的模型是如何注入文档的?这可能会给我一个线索。谢谢。Swagger设计用于记录API端点,这需要控制器操作。随机类不会被包括在内,因为随机类不能够被路由到,因此不提供任何实际的端点。我的查询类是完全可路由的。我这一点做得很好。我需要的是用某种方式来解释这一点。斯威格是怎么知道控制器的?这些信息从哪里来,是什么提供的,我可以用这些逻辑来代替其他逻辑吗?正如我所说,在以前的版本中,使用IApiExplorer的自定义实现是可能的。@Zvirk您有时间使用
IDocumentFilter
测试我的答案吗?这就是我将模型注入文档的方式。这实际上是解决方案的一部分,谢谢。
private class ApplyDocumentVendorExtensions : IDocumentFilter
{
    public void Apply(SwaggerDocument sd, SchemaRegistry sr, IApiExplorer ae)
    {
        sr.GetOrRegister(typeof(ExtraType));
        //sr.GetOrRegister(typeof(BigClass));        
    }
}