C# 该请求匹配ASP.Net核心OData中的多个端点
我提出了我的第一个OData请求:C# 该请求匹配ASP.Net核心OData中的多个端点,c#,asp.net-core,odata,.net-5,C#,Asp.net Core,Odata,.net 5,我提出了我的第一个OData请求: [HttpGet] [启用查询] 公共IQueryable Get() { 返回_applicationUserRepository.GetAll(); } 现在我想为Get(id)添加第二个: [HttpGet] [启用查询] 公共应用程序用户获取([FromODataUri]长id) { 返回_applicationUserRepository.Get(id).Result; } 现在的问题是,当我尝试与postman执行第一个调用时,结果是: GET
[HttpGet]
[启用查询]
公共IQueryable Get()
{
返回_applicationUserRepository.GetAll();
}
现在我想为Get(id)添加第二个:
[HttpGet]
[启用查询]
公共应用程序用户获取([FromODataUri]长id)
{
返回_applicationUserRepository.Get(id).Result;
}
现在的问题是,当我尝试与postman执行第一个调用时,结果是:
GEThttp://localhost:5000/api/v1/applicationuser?$filter=startsWith(LastName,%20%27Test%27)
Microsoft.AspNetCore.Routing.Matching.AmbiguousMatchException:请求匹配多个终结点。匹配项:
- MyAssambly.Controllers.ApplicationUserController.Get(MyAssambly)
- MyAssambly.Controllers.ApplicationUserController.Get(MyAssambly)
我做错了什么?问题是,我们需要使用类似于
或outedata的属性。但在8.0.0-rc版本中,此属性已消失
文档中说,我们需要使用Http动词属性:
[启用查询]
[HttpGet(“应用程序用户”)]
[HttpGet(“ApplicationUser/$count”)]
公共IQueryable Get()
{
返回_applicationUserRepository.GetAll();
}
我以前没有使用过OData,但我可以想象,您需要将{id}
定义为路由的一部分,或者如果OData具有路由属性,则使用OData属性。在互联网上,我发现有人使用他们的方法来区分GET和带有(Id)的GET之间的路由。这就是RESTAPI的工作原理,所以很可能这就是你的问题。@Dennis1679正是我的想法,我也尝试过这个。但在v8.0.0-rc中,当我尝试将符号添加为操作的属性时,它无法解析符号ODataRoute
。也许它被替换了或者只是被移除了。。。