odata 自定义函数参数的短数据类型 (Edm.Int16)
short data type (Edm.Int16) for odata custom function parameter
我在我的 EdmModel 中声明了一个自定义函数:
var getWebMenu = builder.Function("GetWebMenu");
getWebMenu.Parameter<Guid>("SiteId");
getWebMenu.Parameter<Guid>("LanguageId");
getWebMenu.Parameter<string>("MenuName");
getWebMenu.Parameter<int>("MenuIndex");
当我通过 HTTP 调用它时,它工作正常。但是,MenuIndex 的基础数据类型是 short
(int16
),当我将代码转换回 short
getWebMenu.Parameter<short>("MenuIndex");
(很明显,通过我的代码进行更改的流程)HTTP 调用失败并显示 404.0 - Not found
。
两种情况下的 HTTP 调用如下所示:
http://localhost:19215/GetWebMenu(SiteId=ac2453bd-f2dd-e411-8159-984be10349a2,
LanguageId=ac2453bd-f2dd-e411-8159-984be10349a2,
MenuName='Main Menu',MenuIndex=0)?$expand=webMenuItems
当参数声明为 short
:
时,http://localhost:19215/$metadata
看起来很好
<Function Name="GetWebMenu">
<Parameter Name="SiteId" Type="Edm.Guid" Nullable="false"/>
<Parameter Name="LanguageId" Type="Edm.Guid" Nullable="false"/>
<Parameter Name="MenuName" Type="Edm.String" Unicode="false"/>
<Parameter Name="MenuIndex" Type="Edm.Int16" Nullable="false"/>
<ReturnType Type="data.models.WebMenu"/>
</Function>
更多信息
在写这个问题时,我仔细检查了一些事情,我发现我对 "obviously" 流程的假设似乎让我的代码发生了变化。
当它失败时,控制器函数签名如下所示:
[ODataRoute("GetWebMenu(SiteId={siteId}, LanguageId={languageId}, MenuName={menuName},
MenuIndex={menuIndex})")]
[SingleResultEnableQuery]
public SingleResult<WebMenu> GetWebMenu([FromODataUri] Guid siteId,
[FromODataUri] Guid languageId, [FromODataUri] string menuName,
[FromODataUri] short menuIndex)
看到 menuIndex
的 short
数据类型了吗?当我将 getWebMenu.Parameter<short>("MenuIndex");
数据类型更改为 int
时,我将其更改为 int
,反之亦然。
回答?
然而;如果我将 getWebMenu.Parameter<int>("MenuIndex");
保留为 int
并将其余代码保留为 short
,则 HTTP 调用工作正常。
问题!
由于 Edm.Int16 是受支持的类型,我希望我的用户知道 Edm.Int16 是必需的,有人能告诉我如何在 EdmModel 的自定义函数声明中声明 short
吗?
它已被我们的工程师确认为 ODataLib 中 URL 解析器中的错误,并为此创建了一个 GitHub 问题:https://github.com/OData/odata.net/issues/154。请使用它监视修复状态。
我在我的 EdmModel 中声明了一个自定义函数:
var getWebMenu = builder.Function("GetWebMenu");
getWebMenu.Parameter<Guid>("SiteId");
getWebMenu.Parameter<Guid>("LanguageId");
getWebMenu.Parameter<string>("MenuName");
getWebMenu.Parameter<int>("MenuIndex");
当我通过 HTTP 调用它时,它工作正常。但是,MenuIndex 的基础数据类型是 short
(int16
),当我将代码转换回 short
getWebMenu.Parameter<short>("MenuIndex");
(很明显,通过我的代码进行更改的流程)HTTP 调用失败并显示 404.0 - Not found
。
两种情况下的 HTTP 调用如下所示:
http://localhost:19215/GetWebMenu(SiteId=ac2453bd-f2dd-e411-8159-984be10349a2,
LanguageId=ac2453bd-f2dd-e411-8159-984be10349a2,
MenuName='Main Menu',MenuIndex=0)?$expand=webMenuItems
当参数声明为 short
:
http://localhost:19215/$metadata
看起来很好
<Function Name="GetWebMenu">
<Parameter Name="SiteId" Type="Edm.Guid" Nullable="false"/>
<Parameter Name="LanguageId" Type="Edm.Guid" Nullable="false"/>
<Parameter Name="MenuName" Type="Edm.String" Unicode="false"/>
<Parameter Name="MenuIndex" Type="Edm.Int16" Nullable="false"/>
<ReturnType Type="data.models.WebMenu"/>
</Function>
更多信息
在写这个问题时,我仔细检查了一些事情,我发现我对 "obviously" 流程的假设似乎让我的代码发生了变化。 当它失败时,控制器函数签名如下所示:
[ODataRoute("GetWebMenu(SiteId={siteId}, LanguageId={languageId}, MenuName={menuName},
MenuIndex={menuIndex})")]
[SingleResultEnableQuery]
public SingleResult<WebMenu> GetWebMenu([FromODataUri] Guid siteId,
[FromODataUri] Guid languageId, [FromODataUri] string menuName,
[FromODataUri] short menuIndex)
看到 menuIndex
的 short
数据类型了吗?当我将 getWebMenu.Parameter<short>("MenuIndex");
数据类型更改为 int
时,我将其更改为 int
,反之亦然。
回答?
然而;如果我将 getWebMenu.Parameter<int>("MenuIndex");
保留为 int
并将其余代码保留为 short
,则 HTTP 调用工作正常。
问题!
由于 Edm.Int16 是受支持的类型,我希望我的用户知道 Edm.Int16 是必需的,有人能告诉我如何在 EdmModel 的自定义函数声明中声明 short
吗?
它已被我们的工程师确认为 ODataLib 中 URL 解析器中的错误,并为此创建了一个 GitHub 问题:https://github.com/OData/odata.net/issues/154。请使用它监视修复状态。