Swagger UI 用点符号显示 asp.net webapi 参数名称

Swagger UI displaying the asp.net webapi parameter name with dot notation

我已经为我的 asp.net webapi 配置了 Swagger,它类似于下面显示的

[HttpGet]
[Route("search")]
public async Task<HttpResponseMessage> Get([FromUri]SearchCriteria searchCriteria)

当我看到 webapi 的 swagger 文档时,参数显示为

searchCriteria.sortField searchCriteria.sortDirection 依此类推...作为 sortField,sortDirection 是 SearchCriteria

的属性

如何获取没有object.propertyname格式的参数名称?

谁能帮忙解决这个问题? 谢谢

我假设您正在使用 Swashbuckle。

查看 DocumentFiltersOperationFilters。您可以扩展 Swashbuckle 以在文档或操作级别进行干预以修改输出。

通读 Swashbuckle documentation,实现这两个接口中的任何一个都相当简单。

这是我曾经用来从查询参数中删除 class 名称的 OperationFilter

public class ParameterFilter : IOperationFilter
{
    private const string Pattern = @"^ # Match start of string
                .*? # Lazily match any character, trying to stop when the next condition becomes true
                \.  # Match the dot";
    public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription)
    {
        if (operation.parameters == null)
        {
            return;
        }

        foreach (var parameter in operation.parameters
            .Where(x => x.@in == "query" && x.name.Contains(".")))
        {
            parameter.name = Regex.Replace(
                parameter.name,
                Pattern, 
                string.Empty, 
                RegexOptions.IgnorePatternWhitespace);
        }
    }
}

像这样给你SwaggerConfig添加:

GlobalConfiguration.Configuration
    .EnableSwagger(c =>
        {
            // other settings omitted
            c.OperationFilter<ParameterFilter>();    
        }); 

顺便说一句:正则表达式的灵感来自

当您将参数 Name = "" 传递给 FormUri 属性时,Swashbuckle 会生成非限定形式的参数名称,例如sortField 而不是 searchCriteria.sortField.

public async Task<HttpResponseMessage> Get([FromUri(Name = "")]SearchCriteria searchCriteria)