2016-02-24 64 views
0

我有一個POST方法,由於應用於該方法的custom HttpParameterBinding接受多個參數。 (沒有自定義綁定,POST方法只能接受1個參數。)問題是ApiExplorer無法確定這些參數的ApiParameterSource。源應該是FromBody,而不是Unknown。這隻有在有多個參數時纔會發生。如果即使使用相同的參數綁定,只有1個參數,情況也可以正常工作。當POST方法有多個參數時,ApiExplorer無法確定ApiParameterSource

的問題發生在ASP.NET Web API Help Page'sHelpPageConfigurationExtensions.GenerateRequestModelDescription()方法:

private static void GenerateRequestModelDescription(HelpPageApiModel apiModel, ModelDescriptionGenerator modelGenerator, HelpPageSampleGenerator sampleGenerator) 
    { 
     ApiDescription apiDescription = apiModel.ApiDescription; 
     foreach (ApiParameterDescription apiParameter in apiDescription.ParameterDescriptions) 
     { 
      // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
      // In the line below, apiParameter.Source = Unknown, not FromBody 
      // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
      if (apiParameter.Source == ApiParameterSource.FromBody) 
      { 
       ... 
      } 
     } 
    } 

(要清楚,Source屬性是由框架的ApiExplorer級決定,而不是在幫助頁面區域)

我的API方法將自定義的HttpParameterBinding應用於其中,並將參數明確標記爲FromBody

[HttpPost, SimplePostVariableParameterBinding] 
public SomeObject GetSomeObject([FromBody]Object2 obj2, [FromBody]Object3 obj3) { 
    ... 
} 

我也嘗試將參數綁定的WillReadBody屬性設置爲true,以防止發生影響,但不幸的是它沒有。 (它打破了我的自定義綁定,所以我解開了變化。)

我想知道發生了什麼,或者只是更好地瞭解ApiExplorer如何確定源值。與此同時,我已經攻擊了幫助頁面的類來解決這個問題,但我想要一個更好的解決方案。

回答

0

如果您想在您的方法中使用多個參數,則必須通過查詢字符串傳遞數據。否則,你可以使用下面的方法:

[HttpPost] 
public SomeObject GetSomeObject([FromBody] dynamic postData) { 
    ... 
} 

在方法的身上,你能得到後數據如下:POSTDATA [參數名稱]