C# Mvc.版本控制—构建路由的正确方法

C# Mvc.版本控制—构建路由的正确方法,c#,asp.net-web-api,asp.net-core,versioning,C#,Asp.net Web Api,Asp.net Core,Versioning,我使用的是Microsoft.AspNetCore.Mvc.Versioning,很难正确设置路由。以下是Hanselman博客上的信息: 我想通过URI访问我的API,如下所示: 我的foo类具有正确的属性: [ApiVersion("1.0")] [Route("api/v{version:apiVersion}/[controller]")] 以上操作正常,但如果我键入以下内容(无版本): 在进行上述操作时,我得到了一个404(我假设因为没有指定版本,路由设置不正确) 我尝试将其添

我使用的是
Microsoft.AspNetCore.Mvc.Versioning
,很难正确设置路由。以下是Hanselman博客上的信息:

我想通过URI访问我的API,如下所示:

我的foo类具有正确的属性:

[ApiVersion("1.0")]
[Route("api/v{version:apiVersion}/[controller]")]
以上操作正常,但如果我键入以下内容(无版本):

在进行上述操作时,我得到了一个404(我假设因为没有指定版本,路由设置不正确)

我尝试将其添加到Startup.cs文件:

//Add the versioning
services.AddApiVersioning(o => {
       //Everytime a new version is created this must be updated to default to the latest version.
       o.AssumeDefaultVersionWhenUnspecified = true;
       o.DefaultApiVersion = new ApiVersion(1, 0);
});
但这也不起作用-因此我随后将我想要的路线添加到我的foo类/控制器的顶部:

[Route("api/[controller]")]
这将获得我想要的行为,我可以访问以下所有路由:


应该这样做吗?为什么默认版本不能像Hanselman描述的那样工作?

请注意,Scott并不建议URL路径分段方法允许您提供空白版本:

清楚地说,您拥有完全控制权,但是使用/api/v[1 | 2 | 3]/helloworld从外部得到的结果非常干净


不支持在使用URL段映射时指定默认版本。更多信息,请参见此。

即使在使用~/v/foo/barYeah时,我似乎也得到了404,这与我的问题相同,只是我从我的控制器中删除了
[Route(“api/[controller]”])
,这是什么“那你真的要这么做吗?它被折旧了吗?它是受支持的,但只有在您进行查询字符串或HTTP头版本控制时才受支持。啊,我没有意识到这一点。谢谢David,将最后一条信息添加到答案中,我将标记为正确:)