我有一個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如何確定源值。與此同時,我已經攻擊了幫助頁面的類來解決這個問題,但我想要一個更好的解決方案。