Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 该请求匹配ASP.Net核心OData中的多个端点_C#_Asp.net Core_Odata_.net 5 - Fatal编程技术网

C# 该请求匹配ASP.Net核心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

我提出了我的第一个OData请求:

[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)
在Microsoft.AspNetCore.Routing.Matching.DefaultEndpointSelector.ReportDumbility(CandidateState[]CandidateState)中 位于Microsoft.AspNetCore.Routing.Matching.DefaultEndpointSelector.ProcessFinalCandidates(HttpContext HttpContext,CandidateState[]CandidateTestate) 位于Microsoft.AspNetCore.Routing.Matching.DefaultEndpointSelector.Select(HttpContext HttpContext,CandidateState[]CandidateState) 在Microsoft.AspNetCore.Routing.Matching.DefaultEndpointSelector.SelectAsync(HttpContext HttpContext,CandidateSet CandidateSet) 在Microsoft.AspNetCore.Routing.Matching.DfaMatcher.SelectEndpointWithPoliciesAsync(HttpContext HttpContext,IEndpointSelectorPolicy[]策略,CandidateSet CandidateSet) 在Microsoft.AspNetCore.Routing.EndpointRoutingMiddleware.g_uwaitingMatch | 8_1(EndpointRoutingMiddleware中间件,HttpContext HttpContext,Task matchTask) 在Microsoft.AspNetCore.ResponseCompression.ResponseCompressionMiddleware.Invoke(HttpContext上下文)中 位于Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext上下文)

所以我不知道问题出在哪里。这些方法是不同的,第二个方法应该使用ID参数最终调用它。
我做错了什么?

问题是,我们需要使用类似于
或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
。也许它被替换了或者只是被移除了。。。