如果包含版本,则找不到控制器路由
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.
使用 [ApiVersion("1.0")] 属性正常工作
当我将属性更改为 [ApiVersion("2.0")]
时发出错误的版本错误
所以一切都按预期进行。
总结:
我建议您添加 [Route("api/devices")] 并尝试使用.../api/devices url 作为暂时的解决方法,直到您发现为止更好的东西。
我在尝试路由到通过外部项目包含的控制器时遇到问题。当版本字段从路由中删除时,当直接包含在项目中或来自外部项目时,有问题的控制器工作正常。控制器定义如下。
[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.
使用 [ApiVersion("1.0")] 属性正常工作
当我将属性更改为 [ApiVersion("2.0")]
时发出错误的版本错误
所以一切都按预期进行。
总结:
我建议您添加 [Route("api/devices")] 并尝试使用.../api/devices url 作为暂时的解决方法,直到您发现为止更好的东西。