我正在尝试在现有的生产性 WebAPI 2 应用程序中实现“Microsoft.AspNet.WebApi.Versioning”nuget,以支持新设计的“v2”控制器。
到目前为止,大多数控制器都可以正常工作,但现在我遇到了一些 POST 控制器的问题。
示例代码:
using Microsoft.Web.Http;
using System.Web.Http;
namespace ApplicationApi.Controllers
{
[ApiVersion("1.0")]
[Route("api/version")]
public class VersionController : ApiController
{
//Works
[HttpGet]
public IHttpActionResult Get()
{
return Ok(true);
}
//Throws HTTP 405 - The requested resource with API version '1.0' does not support HTTP method 'POST'.
[HttpPost]
public IHttpActionResult Post(int id, [FromBody]dynamic value)
{
return Ok(true);
}
//Works
[HttpPost]
public IHttpActionResult Post([FromBody]dynamic value)
{
return Ok(true);
}
}
}
所有没有附加 {id} 的 POST 方法都有效。但是由于我们有大量的旧客户端很长一段时间,我必须保持旧版本正常运行,并且在旧控制器中删除 {id} 不是一个选项。在新的控制器中,不需要 {id}。
WebAPI 配置
var constraintResolver = new DefaultInlineConstraintResolver()
{
ConstraintMap =
{
["apiVersion"] = typeof( ApiVersionRouteConstraint )
}
};
config.MapHttpAttributeRoutes(constraintResolver);
config.AddApiVersioning(options =>
{
options.AssumeDefaultVersionWhenUnspecified = true;
});
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
知道我做错了什么或如何解决这个问题吗?