【问题标题】:The request matched multiple endpoints in ASP.Net Core OData该请求与 ASP.Net Core OData 中的多个端点匹配
【发布时间】:2021-04-09 21:28:24
【问题描述】:

我完成了我的第一个 OData-Request 工作:

[HttpGet]
[EnableQuery]
public IQueryable<ApplicationUser> Get()
{
    return _applicationUserRepository.GetAll();
}

现在我想为 Get(id) 添加第二个:

[HttpGet]
[EnableQuery]
public ApplicationUser Get([FromODataUri]long id)
{
    return _applicationUserRepository.Get(id).Result;
}

现在的问题是,当我尝试使用邮递员执行第一次调用时,结果是: GET http://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.ReportAmbiguity(CandidateState[] CandidateState) 在 Microsoft.AspNetCore.Routing.Matching.DefaultEndpointSelector.ProcessFinalCandidates(HttpContext httpContext,CandidateState[] CandidateState) 在 Microsoft.AspNetCore.Routing.Matching.DefaultEndpointSelector.Select(HttpContext httpContext, CandidateState[] CandidateState) 在 Microsoft.AspNetCore.Routing.Matching.DefaultEndpointSelector.SelectAsync(HttpContext httpContext,CandidateSet 候选集) 在 Microsoft.AspNetCore.Routing.Matching.DfaMatcher.SelectEndpointWithPoliciesAsync(HttpContext httpContext,IEndpointSelectorPolicy[] 策略,CandidateSet 候选集) 在 Microsoft.AspNetCore.Routing.EndpointRoutingMiddleware.g__AwaitMatch|8_1(EndpointRoutingMiddleware 中间件,HttpContext httpContext,任务 matchTask) 在 Microsoft.AspNetCore.ResponseCompression.ResponseCompressionMiddleware.Invoke(HttpContext 上下文) 在 Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext 上下文)

所以我不知道问题可能是什么。方法是不同的,第二个应该明确地用 ID 参数调用它。 我做错了什么?

【问题讨论】:

  • 我之前没有使用过 OData,但我可以想象您需要将 {id} 定义为路由的一部分,或者如果它具有路由属性,则使用 OData 属性。在互联网上,我发现[ODataRoute("({Id})")] 有人使用他们的方法来区分 GET 和 GET 之间的路由(id)。而且,这就是它与 REST API 一起工作的方式,所以这很可能是你的问题。
  • @Dennis1679 正是我的想法,我也试过这个。但是在 v8.0.0-rc 中,当我尝试将符号 ODataRoute 添加为我的操作的属性时,它无法解析它。也许它被替换或简单地删除了......

标签: c# asp.net-core odata .net-5


【解决方案1】:

问题是,我们需要使用ORouteData-Attribute 之类的东西。但在 8.0.0-rc 版本中,这个属性消失了。

文档说,我们需要使用 Http 动词属性:

[EnableQuery]
[HttpGet("ApplicationUser")]
[HttpGet("ApplicationUser/$count")]
public IQueryable<ApplicationUser> Get()
{
    return _applicationUserRepository.GetAll();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-02
    • 1970-01-01
    • 2020-04-04
    • 1970-01-01
    相关资源
    最近更新 更多