ODataRoutePrefix不适用于第三级

时间:2019-06-06 21:56:14

标签: asp.net-web-api2 odata asp.net-web-api-odata

当我尝试使用具有[ODataRoutePrefix]属性的第三级细分时,会引发如下错误:

控制器“ CONTROLLER-NAME”中动作“ Get”上的路径模板“ [TEMPLATE]”不是有效的OData路径模板。在OData路径模板“ [TEMPLATE]”中找到了未解析的路径段“ [LAST-SEGMENT]”。

详细信息

  • 适用于父段的ODataRoutePrefix [ODataRoutePrefix("lawsuits/{parentId}/depositsGuarantees")]
  • 无法使用的新控制器的ODataRoutePrefix [ODataRoutePrefix("lawsuits/{parentId}/depositsGuarantees/{subResourceId}/customFields")]
  • 启动API(config.EnsureInitialized())时出现错误消息: 控制器“ LawsuitDepositGuaranteeCustomFields”中操作“获取”的路径模板“ lawsuits / {parentId} / depositsGuarantees / {subResourceId} / customFields”不是有效的OData路径模板。在OData路径模板“ lawsuits / {parentId} / depositsGuarantees / {subResourceId} / customFields”中找到了一个未解决的路径段“ customFields”。

其他信息

  • 操作方法正确预期了Route前缀中定义的参数。示例:
public IHttpActionResult Get(int parentId, int subResourceId)
{
    // [...]
}
  • 尽管它抱怨“找到了一个未解决的路径段'customFields'”,但该段适用于其他现有控制器,其前缀如下:[ODataRoutePrefix("lawsuits/{parentId}/customFields")],这意味着在OData上已为“ customFields”细分。

受影响的程序集

OData WebApi库6.0.0

1 个答案:

答案 0 :(得分:1)

我发现了问题所在...

depositsGuarantees段的 model 缺少为customFields段注册的 model 的集合属性。实际上,缺少此属性:

public IEnumerable<CustomFieldModel> CustomFields { get; set; }

我仍然想知道我应该真正使用lawsuits/{parentId}/depositsGuarantees/{subResourceId}/customFields还是仅使用depositsGuarantees/{parentId}/customFields(尽管depositsGuarantees也是子资源),但这只是一个概念性的讨论。