C# Asp.net Web API 2查询字符串参数版本控制中的API版本控制
我想在我的Web API 2中实现查询字符串参数版本控制 已安装的nuget软件包:安装软件包Microsoft.AspNet.WebApi.Versioning WebApiConfig.csC# Asp.net Web API 2查询字符串参数版本控制中的API版本控制,c#,api,asp.net-web-api,asp.net-core,asp.net-web-api2,C#,Api,Asp.net Web Api,Asp.net Core,Asp.net Web Api2,我想在我的Web API 2中实现查询字符串参数版本控制 已安装的nuget软件包:安装软件包Microsoft.AspNet.WebApi.Versioning WebApiConfig.cs config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/v{version}/default/{action}/{id}", d
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/v{version}/default/{action}/{id}",
defaults: new { Controllers="Default", Version="1.0", id = RouteParameter.Optional }
);
控制器
[ApiVersion("2.0")]
[ApiVersion("1.0", Deprecated = true)]
//[Route("api/v{version:apiVersion}/[controller]")]
public class DefaultController : ApiController
{
public HttpResponseMessage Get()
{
return new HttpResponseMessage()
{
Content = new StringContent("GET: Default Test message")
};
}
//This action mapped to Version 2.0
[HttpPost,MapToApiVersion("2.0")]
public HttpResponseMessage GetProduct(Product item)
{
if (!ModelState.IsValid)
{
return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
}
return Request.CreateResponse(HttpStatusCode.OK, item.Name);
// Implementation not shown...
}
}
我想使用URI:API/v2.0/default/GetProduct访问API
但是,没有找到与请求URI匹配的HTTP资源。您的问题表明您希望按查询字符串进行版本设置,但代码和示例表明您希望按URL段进行版本设置。你可能想澄清你的问题。我假设你指的是URL段 这不起作用的原因是您没有应用apVersionRouteConstraint。根据定义,
{version}
路由参数被视为一个普通的旧字符串,这将不起作用
正确的设置是:
config.Routes.MapHttpRoute(
名称:“DefaultApi”,
routeTemplate:“api/v{version}/{controller}/{action}/{id}”,
默认值:new{controller=“Default”,id=RouteParameter.Optional},
约束条件:new{version=new ApiVersionRouteConstraint()},
);
除非位于模板末尾,否则不能有默认值。这意味着
{Version=“1.0”}
将无效,可以省略。名称version
可以是您想要的任何名称,只要它与模板中指定的名称匹配。您的问题表示您希望按查询字符串进行版本设置,但代码和示例表明您希望按URL段进行版本设置。你可能想澄清你的问题。我假设你指的是URL段
这不起作用的原因是您没有应用apVersionRouteConstraint。根据定义,{version}
路由参数被视为一个普通的旧字符串,这将不起作用
正确的设置是:
config.Routes.MapHttpRoute(
名称:“DefaultApi”,
routeTemplate:“api/v{version}/{controller}/{action}/{id}”,
默认值:new{controller=“Default”,id=RouteParameter.Optional},
约束条件:new{version=new ApiVersionRouteConstraint()},
);
除非位于模板末尾,否则不能有默认值。这意味着
{Version=“1.0”}
将无效,可以省略。名称version
可以是您想要的任何名称,只要它与模板中指定的名称匹配。为什么GetProduct
操作是一个[HttpPost]
请求?GetProduct是操作名称,需要使用的方法类型是[HttpPost],因此,GetProduct只是命名(可以是任何名称)。为什么GetProduct
操作是一个[HttpPost]
请求?GetProduct是操作名称,需要使用的方法类型是[HttpPost],因此,GetProduct只是命名而已(它可以是任何东西)。