如何在 Swagger 中显示查询参数的 C# 验证属性

And*_*rew 2 swagger asp.net-core-webapi

我正在将 Swagger 与 ASP.Net Core 2.1 Web API 项目结合使用。下面是一个控制器操作方法示例:

[HttpGet]
public string GetString([Required, MaxLength(20)] string name) =>
    $"Hi there, {name}.";
Run Code Online (Sandbox Code Playgroud)

这是我在 Swagger 文档中得到的内容。正如您所看到的,Swagger 显示了Required属性,但没有显示MaxLength属性:

在此输入图像描述

如果我在作为 POST 操作方法参数的 DTO 类上使用Required和属性,则 Swagger 会同时显示它们:MaxLength

在此输入图像描述

如何让 Swagger 显示MaxLength查询参数的(和其他)验证属性?

注意:我尝试string name用一​​个类替换该参数,该类具有一个名为name- Swagger 的字符串属性,生成完全相同的文档。

Raj*_*mar 5

在 .NET Core 中,您可以使用ShowCommonExtensions = true, 和给定的序列(ConfigObject 在顶部)。

public static IApplicationBuilder UseR6SwaggerDocumentationUI(
            this IApplicationBuilder app)
{
    app.UseSwagger();
    app.UseSwaggerUI(c =>
    {
        //Allow to add addition attribute info on doc. like [MaxLength(50)]
        c.ConfigObject = new ConfigObject
        {
            ShowCommonExtensions = true
        };

        c.SwaggerEndpoint("/swagger/v1/swagger.json", "Asptricks.net API");
        c.RoutePrefix = "api_documentation/index";
        c.InjectStylesheet("/swagger-ui/custom.css");
        c.InjectJavascript("/swagger-ui/custom.js");
        c.SupportedSubmitMethods( new[] { SubmitMethod.Patch });

        //Collapse model near example.
        c.DefaultModelExpandDepth(0);

        //Remove separate model definition.
        c.DefaultModelsExpandDepth(-1);
    });

    return app;
}
Run Code Online (Sandbox Code Playgroud)