【发布时间】:2017-02-23 07:18:00
【问题描述】:
我想在我的 Web API 2 中实现查询字符串参数版本控制
已安装 nuget 包:Install-Package Microsoft.AspNet.WebApi.Versioning
WebApiConfig.cs
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:api/v2.0/default/GetProduct
但是,得到消息没有找到与请求 URI 匹配的 HTTP 资源
【问题讨论】:
-
为什么
GetProduct操作是[HttpPost]请求? -
GetProduct 是动作名称,需要使用的方法类型是 [HttpPost] 所以,GetProduct 只是命名(可以是任何东西)。
标签: c# api asp.net-web-api asp.net-core asp.net-web-api2