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

问题描述 投票:0回答:1

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

[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;
});
c# asp.net-core .net-core asp.net-core-mvc
1个回答
1
投票

我已经做了一些测试。

首先我将 [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 作为暂时的解决方法,直到您找到更好的方法。

© www.soinside.com 2019 - 2024. All rights reserved.