【问题标题】:defining two get functions in Odata web api controller在 Odata web api 控制器中定义两个 get 函数
【发布时间】:2016-09-04 23:30:44
【问题描述】:

我和Defining two get function in WebAPI有类似的问题

我创建了一个 ODataController ,除了参数的数据类型之外,它有两个签名相同的 get 方法。

一种方法以Id为键,返回语言对象。

第二种方法获取字符串名称并返回语言对象。

[EnableQuery]
    
public SingleResult<Language> GetLanguage([FromODataUri] int key)
{
    return SingleResult.Create(_LanguageService.GetById_Queryable(key));
}

[EnableQuery]
public SingleResult<Language> GetLanguage([FromODataUri] string lname)
{
    return SingleResult.Create(_LanguageService.GetByName(lname));
}

结果:

第一种方法:http://localhost/RoomReservationSystem_Api/odata/Languages(1)

{
    "@odata.context":"http://localhost/RoomReservationSystem_Api/odata/$metadata#Languages/$entity","Name":"Urdu","Enabled":true,"Id":1
}

第二种方法:http://localhost/RoomReservationSystem_Api/odata/Languages(%22Urdu%22)

找不到资源。

描述:HTTP 404。您要查找的资源(或其依赖项之一)可能已被删除、名称已更改或暂时不可用。请检查以下 URL 并确保其拼写正确。

【问题讨论】:

  • 你能告诉我们BuildFunctions方法吗?
  • 我没有在 Build Function 中为这个方法添加任何定义。

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


【解决方案1】:

基本上,OData Lib 无法理解您的第二个方法调用:

http://localhost/RoomReservationSystem_Api/odata/Languages(%22Urdu%22)

因为Language 类型只有 int 作为它的键。

如果您确实想让它工作,我认为您可以使用 ODL 6.13 中提供的名为备用键的新功能。

这是备用键示例:https://github.com/OData/ODataSamples/tree/master/WebApi/v4/ODataAlternateKeySamples

希望对您有所帮助。谢谢。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2014-09-20
  • 2014-09-29
  • 1970-01-01
  • 1970-01-01
  • 2016-05-03
  • 1970-01-01
  • 1970-01-01
  • 2013-02-22
相关资源
最近更新 更多