gpt4 book ai didi

c# - ASP.NET Core 属性路由

转载 作者:太空狗 更新时间:2023-10-29 20:06:56 25 4
gpt4 key购买 nike

我正在将一个项目迁移到 asp net core,但我无法配置这些路由,我正在使用属性来映射操作。

ASP.Net WebAPI2 代码

[Route("api/[controller]")]
public class SalesController : Controller
{
// api/sales/1 -> ok
[HttpGet]
public HttpResponseMessage Get(int id)
{
// Logic
}

// api/sales -> ok
[HttpGet]
public HttpResponseMessage Get([FromUri] PaginationHelper pagination)
{
// Logic
}

// api/sales?me -> ok
[ActionName("Get")]
public HttpResponseMessage GetMe(bool? me)
{
// Logic
}
}

ASP.Net Core 代码

在文件 Startup.cs 中设置了 app.UseMvc();

[Route("api/[controller]")]
public class SalesController : Controller
{
// api/sales/1 -> ok
[HttpGet("{id}")]
public IActionResult Get(int id)
{
// Logic
}

// api/sales -> don't work
[HttpGet] // -> ???
public IActionResult Get(PaginationHelper pagination)
{
// Logic
}

// api/sales?me -> don't work
[HttpGet] // -> ???
public IActionResult GetMe(bool? me)
{
// Logic
}
}

最佳答案

也许我来不及讨论这个问题,但这对像我一样最终阅读此页面的其他人来说可能很有值(value)。您的 API 端点的问题是您将其中的 2 个端点配置为处理相同的路由:GET/api/sales

如果您尝试访问该路由,框架将无法区分 Get(PaginationHelper)GetMe(bool?)。原因是它们都有 [HttpGet] 属性,这意味着它们都能够处理您在 [Route("api/[controller]")] 属性,就在你的类声明之上。由于它们被声明为能够处理相同的路由,因此出现异常(匹配多个操作)。

您的问题的解决方案取决于您要处理该不明确路线的操作。假设您希望路由 GET/api/salesGet(PaginationHelper) 处理,您可以更改 GetMe(bool?) action 方法及其 [HttpGet] 属性如下所示:

[HttpGet("me")] // GET api/sales/me
public IActionResult GetMe() {
// Logic
}

关于c# - ASP.NET Core 属性路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46427063/

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