我为我的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格式的情况下获取参数名称?
任何人都可以帮忙解决这个问题吗? 感谢
答案 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。
查看DocumentFilters
和OperationFilters
。您可以扩展Swashbuckle以干预文档或操作级别以修改输出。
通读Swashbuckle documentation,可以直接实现这两个接口中的任何一个。
答案 2 :(得分:0)
当您将参数Name = ""
传递到FormUri
属性时,Swashbuckle会以非限定形式生成参数名称,例如sortField
而不是searchCriteria.sortField
。
public async Task<HttpResponseMessage> Get([FromUri(Name = "")]SearchCriteria searchCriteria)