ASP.核心控制器的继承和路由



在两个解决方案中,我将相同的控制器类分布在几个项目中。在解决方案A中,路由按预期工作,而在解决方案b中则不然。我不知道为什么?

[ApiController]
[Route("/api/[controller]")]
public abstract class ApiControllerBase : ControllerBase, IController
{
...
}
public class ApiCrudControllerBase<T> : ApiControllerBase where T : IModel, new()
{
...
}
[Route("/portal-api/[controller]")]
public class PortalApiCrudController<T> : ApiCrudControllerBase<T> where T : IModel, new()
{
...
}
public class RoleController : PortalApiCrudController<Role>
{
}
[HttpPost]
[Route("{roleId}/userGroup/{userGroupId}")]
public async Task<ActionResult<ApiListResponse<UserGroup>>> AddUserGroup2Role(string 
roleId, string userGroupId)
{
...
}
[HttpGet]
[Route("/portal-api/roles")]
public ActionResult<ApiListResponse<Role>> Read([FromQuery] FilterSettings filterSettings)
{
...
}
}

Swagger给出了到端点的如下路径。

应用程序:

POST /portal-api/role/{roleId}/userGroup/{userGroupId}
GET  /portal-api/roles
应用B:

POST /api/role/{roleId}/userGroup/{userGroupId}
GET  /portal-api/roles

似乎在应用程序B中,路由中的继承不起作用。我已经检查了nuget包版本,启动配置,....到目前为止,我没有发现任何不同。

有什么建议吗?

显然[Route]属性存在于两个命名空间中。

Microsoft.AspNetCore.MvcMicrosoft.AspNetCore.Components

其中一个"中间"的路由命名空间与其他的不同。它往南走了。

可能是在重构和"在解决方案中添加缺少的用法"时,其中一个得到了错误的用法。

最新更新