【发布时间】:2016-03-18 16:21:00
【问题描述】:
我有一个 POST 方法,由于应用于该方法的 custom HttpParameterBinding,它接受 多个 参数。 (如果没有自定义绑定,POST 方法只能接受 1 个参数。)问题是 ApiExplorer 无法确定这些参数的 ApiParameterSource。源应该是FromBody,而是Unknown。只有当有多个参数时才会发生这种情况。即使使用相同的参数绑定,如果只有 1 个参数,一切正常。
问题发生在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 如何确定源值。与此同时,我已经破解了帮助页面的课程来解决这个问题,但我想要一个更好的解决方案。
【问题讨论】:
标签: .net asp.net-web-api