我有一个POST方法,由于应用于该方法的custom HttpParameterBinding,它接受多个参数。 (没有自定义绑定,POST方法只能接受1个参数。)问题是ApiExplorer无法确定这些参数的ApiParameterSource。来源应为FromBody
,而应为Unknown
。仅当存在多个参数时才会发生这种情况。即使使用相同的参数绑定,如果只有1个参数,情况也会正常。
问题发生在ASP.NET Web API Help Page's HelpPageConfigurationExtensions.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 :(得分:0)
如果要在方法中使用多个参数,则必须通过查询字符串传递数据。否则您可以使用以下方式:
[HttpPost]
public SomeObject GetSomeObject([FromBody] dynamic postData) {
...
}
在方法体中,您可以获得如下发布数据:postData。[参数名称]