var constraintResolver = new DefaultInlineConstraintResolver()
{
ConstraintMap =
{
["apiVersion"] = typeof( ApiVersionRouteConstraint )
}
};
config.MapHttpAttributeRoutes(constraintResolver);
config.AddApiVersioning(o => o.AssumeDefaultVersionWhenUnspecified = true);
[ApiVersion("2.05")]
[RoutePrefix("api/v{version:apiVersion}/ger")]
public class caGerController
[Route("~/api/ger/getDetail")]
[Route("getDetail")]
GetGerData
[ApiVersion("1")]
[RoutePrefix("api/v{version:apiVersion}/gerDetail")]
public class caGerDetailsController
caGerController
[Route("~/api/gerDetail/getDetail")]
[Route("getDetail")]
GetGerData
>> GetGerData
结果: 1)两个URL都使用v1版ROUTE。 2)第二个URL同时适用于v1和不带v1路由的直接路由,即[路由("〜/ api / gerDetail / getDetail")]
3)问题:第一个URL仅适用于v1,而不适用于直接路由,例如" 〔路线("〜/ API / GER / getDetail&#34)]" 并收到如下错误:
"Error": {
"Code": "ApiVersionUnspecified",
"Message": "An API version is required, but was not specified."
}
如何解决这个问题。 当我从2.05更改为1.0然后它工作,但2.0或2.05都不起作用。是否需要单独的文件夹?
答案 0 :(得分:2)
ApiVersionUnspecified 是因为所有路由默认需要显式API版本。您可以使用以下选项退出此行为:
options.AssumeDefaultVersionWhenUnspecified = true
此设置表示当客户端未提供默认API版本时,将采用默认API版本。默认值为:
options.DefaultApiVersion // equals 1.0 by default
使用网段版本控制方法时,您不能拥有两个不同的无版本路径的控制器。没有API版本的路由只能映射到单个控制器。由于默认值为" 1.0"并且你有一个带有无版本路线的控制器,这是一个永远匹配的路径。
答案 1 :(得分:0)
通过添加API版本控制,默认行为是它使用QueryString版本控制。
config.AddApiVersioning(cfg => {});
api-version = 1.0
要指定版本,可以在最后添加查询字符串参数 api-version = 1.0 。
示例:
http:// localhost:6600 / api / test?api-version = 1.0
您可以这样更改版本:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
...
public static void Register(HttpConfiguration config)
{
...
config.AddApiVersioning(cfg =>
{
cfg.DefaultApiVersion = new ApiVersion(1,1);
});
因此您可以像这样更改版本:
http:// localhost:6600 / api / test?api-version = 1.1
通过添加 AssumeDefaultVersionWhenUnspecified ,您不必指定版本。
config.AddApiVersioning(cfg =>
{
cfg.DefaultApiVersion = new ApiVersion(1,1);
cfg.AssumeDefaultVersionWhenUnspecified = true;
});
这将起作用: http:// localhost:6600 / api / test
您还可以添加 ReportApiVersions
config.AddApiVersioning(cfg =>
{
cfg.DefaultApiVersion = new ApiVersion(1,1);
cfg.AssumeDefaultVersionWhenUnspecified = true;
cfg.ReportApiVersions = true;
});
响应中将有一个新的标头 api-supported-versions ,该标头指定了其调用所支持的版本。