mvc和api项目的路由冲突

Posted

技术标签:

【中文标题】mvc和api项目的路由冲突【英文标题】:Routes of mvc and api projects conflict 【发布时间】:2021-10-18 01:45:24 【问题描述】:

我有一个 .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>

那么这个a标签会生成一个这样的链接

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

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

【问题讨论】:

对于 api 和 mvc 应用程序,您需要哪些 href?你现在有什么href? My controllers and actions are using same names 是什么意思?能分享一下你的控制器和动作吗? 这是查看 mvc 中内容的标签,此 href 必须触发 mvc 控制器中的操作,但如您所见,它会执行 api 的操作 例如,我在 api 和 mvc 中有类别控制器,这两个控制器都有更新操作,结构完全相同。 【参考方案1】:

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

API

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

mvc

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

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

【讨论】:

以上是关于mvc和api项目的路由冲突的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC 4,Web API - 404 未找到

Redux:如何管理跨路由的冲突状态?

带有查询参数的 MVC 属性路由不起作用

C# MVC框架项目下的路由配置-RouteConfig

Mvc-WebAPI特性路由(自定义路由)Demo

Laravel 路由和 Vue 路由冲突