我已经开始作为.Net Core上的新手,并尝试在controller
(URL Path Segment 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版本上有所不同。所有这些ApiCalls成功地称之为HelloWorldController
Get
方法。
以下网址不起作用(如预期的那样)
<LocalHostUrlHere>/api/v1.../HelloWorldController/
<LocalHostUrlHere>/api/v1.11/HelloWorldController/
<LocalHostUrlHere>/api/v1.1/HelloWorldController/
<LocalHostUrlHere>/api/v2/HelloWorldController/
我很困惑为什么我得到所有URL的结果而不管版本格式!!
还有什么方法可以限制API只返回url <LocalHostUrlHere>/api/v1/HelloWorldController/
的结果?
任何帮助将不胜感激。
谢谢
您必须使用多个ApiVersion
属性。
[ApiVersion("1.1")]
[ApiVersion("1.0")]
[ApiVersion("1.3")]
[ApiVersion("2.0")]
[Route("api/v{version:apiVersion}/[controller]")]