我正在将一个项目迁移到 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/sales
由 Get(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/