Swagger UI用点符号

时间:2016-06-08 14:46:18

标签: c# asp.net-web-api2 swagger swagger-ui swashbuckle

我为我的asp.net webapi配置了Swagger,类似于下面显示的那个

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

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

searchCriteria.sortField searchCriteria.sortDirection 等等...作为sortField,sortDirection是SearchCriteria的属性

enter image description here

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

任何人都可以帮忙解决这个问题吗? 感谢

3 个答案:

答案 0 :(得分:6)

这是{I}曾经用于从查询参数中删除类名的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>();    
        }); 

BTW:正则表达式的灵感来自https://stackoverflow.com/a/7794128/502395

答案 1 :(得分:0)

我假设您使用的是Swashbuckle。

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

通读Swashbuckle documentation,可以直接实现这两个接口中的任何一个。

答案 2 :(得分:0)

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

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