同时使用 url 参数和查询字符串

use both url parameter and query string

我的产品控制器中有两个操作方法。这是我的路由配置。

config.MapHttpAttributeRoutes();

config.Routes.MapHttpRoute(
     name: "DefaultApi",
     routeTemplate: "api/{controller}/{action}/{id}",
     defaults: new { id = RouteParameter.Optional }
);

这是两个动作及其工作 urls。

[HttpGet]
//uri:http://localhost:49964/api/products/product?strKey=1
public IHttpActionResult Product(string strKey)

[HttpPost]
//uri:http://localhost:49964/api/products/product
public IHttpActionResult Product([FromBody] Product product)

不过我也想用下面的url来GET。

http://localhost:49964/api/products/product/1

但是网络 api 响应为,

The requested resource does not support http method 'GET'.

strKey 更改为 id,或者如果您想保留 strKey,则执行相反的操作。

config.Routes.MapHttpRoute(
     name: "DefaultApi",
     routeTemplate: "api/{controller}/{action}/{strKey}",
     defaults: new { strKey = RouteParameter.Optional }
);

路由模板需要与操作相匹配,映射才能按预期工作。

//GET api/products/product/1
//GET api/products/product?strKey=1
[HttpGet]    
public IHttpActionResult Product(string strKey)

但这意味着这条路线中的所有操作都可以选择使用 strKey 作为占位符