在Odata web api控制器中定义两个get函数

时间:2015-09-08 18:37:23

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

我有与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.您正在查找的资源(或其中一个依赖项)可能已被删除,名称已更改或暂时不可用。请查看以下网址,确保拼写正确。

1 个答案:

答案 0 :(得分:0)

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

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

因为SELECT * FROM myQuestions WHERE id NOT IN (7,4) ORDER BY RAND() LIMIT 1类型只有int作为其键。

如果您确实想要使其正常工作,我认为您可以使用ODL 6.13中附带的名为alternate key的新功能。

以下是替代密钥示例:https://github.com/OData/ODataSamples/tree/master/WebApi/v4/ODataAlternateKeySamples

希望它可以帮到你。感谢。