限制特定URL路径段版本的.Net Core API URL

时间:2018-02-28 08:23:34

标签: c# rest api .net-core

我已经开始作为 .Net Core 的新手,并尝试在controller网址路径段Versoning )上设置版本控制。

以下是我的示例controller

[ApiVersion( "1" )]
[Route( "api/v{version:apiVersion}/[controller]" )]
public class HelloWorldController : Controller {
    public string Get() => "Hello world!";
}

这就是我在Startup文件

中强制使用版本的方法
public void ConfigureServices(IServiceCollection services)
{        
    services.AddMvc();
    services.AddApiVersioning(v =>
    {
       v.ReportApiVersions = true;
    });
}

当我使用以下URL在本地调用API时,结果相同,即成功

<LocalHostUrlHere>/api/v1../HelloWorldController/
<LocalHostUrlHere>/api/v1.0./HelloWorldController/
<LocalHostUrlHere>/api/v1.0/HelloWorldController/
<LocalHostUrlHere>/api/v1/HelloWorldController/

请注意,上述4个调用在API版本上有所不同。所有这些ApiCall都成功调用HelloWorldController Get方法。

以下网址不起作用(如预期的那样)

<LocalHostUrlHere>/api/v1.../HelloWorldController/
<LocalHostUrlHere>/api/v1.11/HelloWorldController/
<LocalHostUrlHere>/api/v1.1/HelloWorldController/
<LocalHostUrlHere>/api/v2/HelloWorldController/

我很困惑为什么我会在所有网址上得到结果而不管版本格式!!

还有什么方法可以限制API只返回网址<LocalHostUrlHere>/api/v1/HelloWorldController/的结果吗?

任何帮助将不胜感激。

由于

1 个答案:

答案 0 :(得分:0)

您必须使用多个ApiVersion属性。

[ApiVersion("1.1")]
[ApiVersion("1.0")]
[ApiVersion("1.3")]
[ApiVersion("2.0")]
[Route("api/v{version:apiVersion}/[controller]")]