如何为SignalR生成API文档

Liv*_*oud 20 c# code-documentation signalr swashbuckle

有没有办法做到这一点?

我有swashbuckle为我的其他API生成内容但我不相信它适用于SignalR.

dor*_*can 6

这是一个可以帮助您的 Nuget 包。

Nuget 链接:https ://www.nuget.org/packages/SignalRSwaggerGen/

Github 链接:https : //github.com/Dorin-Mocan/SignalRSwaggerGen/wiki

首先,您需要使用 SignalRSwaggerGen.Attributes 命名空间中的属性装饰您的 SignalR 集线器:

[SignalRHub(path: "/hubs/SomeHub")]
public class SomeHub : Hub
{
    [SignalRMethod(name: "nameOfTheMethodCalledOnTheClientSide", operationType: OperationType.Put)] 
    public async Task SomeMethod([SignalRArg] int arg1, [SignalRArg] object arg2, CancellationToken cancellationToken = default)
    {
        if (Clients == null) return;
        await Clients.All.SendAsync("nameOfTheMethodCalledOnTheClientSide", arg1, arg2, cancellationToken);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后添加 SignalRSwaggerGen.SignalRSwaggerGen 类作为 Swagger 生成器的文档过滤器:

services.AddSwaggerGen(options =>
{
    options.SwaggerDoc("v1", new OpenApiInfo { Title = "Some API v1", Version = "v1" });
    // here some other configurations maybe...
    options.DocumentFilter<SignalRSwaggerGen.SignalRSwaggerGen>(new List<Assembly> { typeof(SomeHub).Assembly, typeof(SomeHubFromAnotherAssembly).Assembly });
});
Run Code Online (Sandbox Code Playgroud)

更多信息请参考 Github 文档。

  • 该包的最新版本带来了自动发现选项,这样您就不需要用属性来装饰方法及其参数,这使得代码的噪音更少。此外,还支持多个 Swagger 文档和其他简洁的内容。 (5认同)
  • @ruzgarustu,更新了维基。抱歉让您困惑,感谢您的反馈! (3认同)
  • 感谢这个包裹。从 Wiki 中我不清楚是否不再需要装饰方法及其参数。也许我错过了一些东西,但如果是这样的话,你能相应地更新维基吗? (2认同)

Mar*_*olo -5

假设您使用的是 Asp.NET Core,则可以在启动时注入自定义文档。

在你的中Startup.ConfigureServices你应该已经有一个 Swagger 部分:

services.AddSwaggerGen(c =>
{
    ...
})
Run Code Online (Sandbox Code Playgroud)

只需将自定义 XML 文件添加到 Swagger 文档即可:

services.AddSwaggerGen(c =>
{
    c.IncludeXmlComments("custom_doc.xml");
})
Run Code Online (Sandbox Code Playgroud)

其中custom_doc.xml是标准 C# XML 文档文件。

  • 您是在回答有关 signalR - Web 套接字协议工具 api 文档还是有关休息的问题? (9认同)