我有与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.您正在查找的资源(或其中一个依赖项)可能已被删除,名称已更改或暂时不可用。请查看以下网址,确保拼写正确。
答案 0 :(得分:0)
基本上,OData Lib无法理解你的第二个方法调用:
http://localhost/RoomReservationSystem_Api/odata/Languages(%22Urdu%22)
因为SELECT * FROM
类型只有int作为其键。myQuestions
WHERE id
NOT IN (7,4) ORDER BY RAND() LIMIT 1
如果您确实想要使其正常工作,我认为您可以使用ODL 6.13中附带的名为alternate key的新功能。
以下是替代密钥示例:https://github.com/OData/ODataSamples/tree/master/WebApi/v4/ODataAlternateKeySamples
希望它可以帮到你。感谢。