mvc 和 api 项目的路由冲突

Routes of mvc and api projects conflict

我有一个 .NET Core 项目,它在同一解决方案中包含 MVC 和 Web API。我正在尝试将这些项目相互连接,但 API 的路线和 MVC 的冲突。

我有一个这样的标签,

<a asp-controller="Categories" asp-action="Update" 
   class="btn btn-primary" asp-route-categoryId="@category.Id">Update</a>

然后这个标签生成一个 link 像这样

href="/api/Categories?categoryId=1" 

我的控制器和操作使用相同的名称,我认为这就是它发生的原因,所以我更改了名称然后它起作用了。我可以更改名称,但想知道为什么会这样。有不同的解决方案吗?

其中一个解决方案可能是使用属性路由。例如

api

[ApiController]
[Route("api/[controller]/[action]")]
public class CategoryController:ControllerBase

mvc

[Route("[controller]/[action]")]
public class CategoryController:Controller

或者您可以在启动文件中配置类似的路由模板。