2016-06-08 159 views
1

顯示asp.net的WebAPI參數名稱我已經配置揚鞭下面揚鞭UI與點符號

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

所示。當我看到招搖文檔的的WebAPI我的asp.net的WebAPI其類似於一個,該參數被顯示爲

searchCriteria.sortField searchCriteria.sortDirection 等等...是所述的SortField,sortDirection是SearchCriteria

的性質

如何獲取沒有object.propertyname格式的參數名稱?

任何人都可以幫助如何解決這個問題嗎? 謝謝

回答

5

這裏是一個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 => [email protected] == "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

+0

謝謝。有效。 –

0

我假設你使用的是Swashbuckle。

請看DocumentFiltersOperationFilters。您可以擴展Swashbuckle以干預文檔或操作級別以修改輸出。

通讀Swashbuckle documentation,實現這兩個接口之一是相當直接的。

2

簡單的解決方案的啓發就是要 「重命名」 的模式,以什麼

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

工程和簡單

+0

它不起作用。 – ozzimpact

+0

它的確如此,MS記錄了https://msdn.microsoft.com/en-us/library/system.web.http.modelbinding.modelbinderattribute.name(v=vs.118).aspx#P:System.Web.Http .ModelBinding.ModelBinderAttribute.Name 也許分享更多的信息,爲什麼它不適合你? – Darren

+0

對不起@darren我有其他問題。有用。謝謝。 – ozzimpact