当通过外部项目包含控制器时,我在尝试路由到控制器时遇到问题。仅当从路径中删除版本字段时,直接包含在项目中或从外部项目中包含的控制器才能正常工作。控制器定义如下。
[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")]
对可能出现的问题有什么想法吗?对于任何版本信息,服务器似乎都会返回默认索引页面,这是找不到控制器时的后备页面。
用于添加 Api 版本控制的 Startup.cs 代码
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 作为暂时的解决方法,直到您找到更好的方法。