gpt4 book ai didi

routes - 如何在 ASP.NET Core Web API 中重载具有相同数量参数的 Controller 方法?

转载 作者:行者123 更新时间:2023-12-02 15:24:34 24 4
gpt4 key购买 nike

我正在将完整的 .NET Framework Web API 2 REST 项目迁移到 ASP.NET Core 2.2,但在路由中有点迷失。

在 Web API 2 中,我能够根据参数类型使用相同数量的参数重载路由,例如我可以拥有 Customer.Get(int ContactId)Customer.Get(DateTime includeCustomersCreatedSince) 并且传入请求将被相应地路由。

我无法在 .NET Core 中实现相同的目标,我要么收到 405 错误,要么收到 404 错误,然后出现此错误:

"{\"error\":\"The request matched multiple endpoints. Matches: \r\n\r\n[AssemblyName].Controllers.CustomerController.Get ([AssemblyName])\r\n[AssemblyName].Controllers.CustomerController.Get ([AssemblyName])\"}"

这是我的完整 .NET Framework 应用程序 Web API 2 应用程序中的工作代码:

[RequireHttps]    
public class CustomerController : ApiController
{
[HttpGet]
[ResponseType(typeof(CustomerForWeb))]
public async Task<IHttpActionResult> Get(int contactId)
{
// some code
}

[HttpGet]
[ResponseType(typeof(List<CustomerForWeb>))]
public async Task<IHttpActionResult> Get(DateTime includeCustomersCreatedSince)
{
// some other code
}
}

这就是我在 Core 2.2 中将其转换为的内容:

[Produces("application/json")]
[RequireHttps]
[Route("api/[controller]")]
[ApiController]
public class CustomerController : Controller
{
public async Task<ActionResult<CustomerForWeb>> Get([FromQuery] int contactId)
{
// some code
}

public async Task<ActionResult<List<CustomerForWeb>>> Get([FromQuery] DateTime includeCustomersCreatedSince)
{
// some code
}
}

如果我注释掉一个 Get 方法,上面的代码就可以工作,但是当我有两个 Get 方法时,上面的代码就会失败。我预计 FromQuery使用请求中的参数名称来引导路由,但情况似乎并非如此?

是否可以重载这样的 Controller 方法,其中您具有相同数量的参数,并且基于参数的类型或参数的名称进行路由?

最佳答案

你不能进行过多的 Action 。路由在 ASP.NET Core 中的工作方式与在 ASP.NET Web Api 中的工作方式不同。但是,您可以简单地组合这些操作,然后在内部进行分支,因为所有参数都是可选的:

public async Task<ActionResult<CustomerForWeb>> Get(int contactId, DateTime includeCustomersCreatedSince)
{
if (contactId != default)
{
...
}
else if (includedCustomersCreatedSince != default)
{
...
}
}

关于routes - 如何在 ASP.NET Core Web API 中重载具有相同数量参数的 Controller 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55569250/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com