如果包含版本,则找不到控制器路由

Controller route not found if it contains a version

我在尝试路由到通过外部项目包含的控制器时遇到问题。当版本字段从路由中删除时,当直接包含在项目中或来自外部项目时,有问题的控制器工作正常。控制器定义如下。

[ApiController]
[ApiVersion("1.0")]
[Produces("application/json")]
[Route("api/v{version:apiVersion}/devices")]
[Authorize(Roles = UserConst.PermissionGroup.Admin)]
public class DeviceManagementController : ControllerBase{...}

将路由更改为以下正确

[Route("api/devices")]

将路由更改为以下失败与通过 {version:apiVersion}

包含它的方式相同
[Route("api/v1.0/devices")]

有什么可能出错的想法吗?对于任何版本信息,服务器似乎 return 默认索引页面,这是找不到控制器时的后备。

Startup.cs 添加 Api 版本控制的代码

services.AddApiVersioning(config =>
{
    config.DefaultApiVersion =
      new ApiVersion(1, 0);
   config.AssumeDefaultVersionWhenUnspecified = true;
   config.ReportApiVersions = true;
});

我做了一些测试。

首先,我将 [Route("api/devices")] 添加到您的控制器属性中

[ApiController]
    [ApiVersion("1.0")]
    [Produces("application/json")]
    [Route("api/v{version:apiVersion}/devices")]
    [Route("api/devices")]
    public class DeviceManagementController : ControllerBase 

发现 url .../api/v1.0/devices 正常工作。

在此之后我尝试使用.../api/devices url.

  1. 使用 [ApiVersion("1.0")] 属性正常工作

  2. 当我将属性更改为 [ApiVersion("2.0")]

    时发出错误的版本错误

所以一切都按预期进行。

总结:

我建议您添加 [Route("api/devices")] 并尝试使用.../api/devices url 作为暂时的解决方法,直到您发现为止更好的东西。