【问题标题】:short data type (Edm.Int16) for odata custom function parameterodata 自定义函数参数的短数据类型 (Edm.Int16)
【发布时间】:2015-04-18 04:41:17
【问题描述】:

我的 EdmModel 中声明了一个自定义函数:

var getWebMenu = builder.Function("GetWebMenu");
getWebMenu.Parameter<Guid>("SiteId");
getWebMenu.Parameter<Guid>("LanguageId");
getWebMenu.Parameter<string>("MenuName");
getWebMenu.Parameter<int>("MenuIndex");

当我通过 HTTP 调用它时,它工作得很好。但是,MenuInde​​x 的基础数据类型是 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>

更多信息

在写这个问题时,我仔细检查了几件事,我发现我的假设“显然”通过我的代码进行了更改,这似乎至少让我很生气。 失败时,Controller 函数签名如下所示:

[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) 

查看menuIndexshort 数据类型?当我将 getWebMenu.Parameter&lt;short&gt;("MenuIndex"); 数据类型更改为 int 时,我将其更改为 int,反之亦然。

回答? 然而;如果我将getWebMenu.Parameter&lt;int&gt;("MenuIndex"); 保留为int,并将其余代码保留为short,那么HTTP 调用就可以正常工作。

问题! 由于 Edm.Int16 是受支持的类型,我希望我的用户知道 Edm.Int16 是必需的,请有人告诉我如何在 EdmModel 上的自定义函数声明中声明 short

【问题讨论】:

    标签: c# asp.net asp.net-web-api odata


    【解决方案1】:

    我们的工程师已确认它是 ODataLib 中 URL 解析器中的一个错误,并为此创建了一个 GitHub 问题:https://github.com/OData/odata.net/issues/154。请使用它监视修复状态。

    【讨论】:

    • 非常感谢,但您的工程师在部署之前没有运行测试吗?这类问题会在野外浪费大量时间并削弱信心。
    猜你喜欢
    • 2018-08-03
    • 2014-10-05
    • 1970-01-01
    • 2011-03-31
    • 1970-01-01
    • 2014-08-05
    • 2021-02-15
    • 1970-01-01
    • 2012-04-21
    相关资源
    最近更新 更多