我正在尝试为我认为非常简单的事情设置 Web API 路由。但是,Web API 中的路由似乎与不同的 HTTP 动词不一致。假设我有这个控制器有这些动作......
public class AvalancheController : ApiControllerBase
{
// GET api/avalanche
public IEnumerable<Avalanche> Get() {}
// GET api/avalanche/5
public Avalanche Get(int id) {}
// GET api/avalanche/ActionTest/5
[ActionName("ActionTest")]
public Avalanche GetActionTest(int id) {}
// GET api/avalanche/ActionTest/2
[ActionName("ActionTest2")]
public Avalanche GetActionTest2(int id) {}
// POST api/avalanche
public void Post([FromBody]Avalanche value) {}
// PUT api/avalanche/5
public void Put(int id, [FromBody]Avalanche value) {}
// PUT api/avalanche/test/5
[ActionName("Test")]
public void PutTest(int id, [FromBody]Avalanche value) {}
// DELETE api/avalanche/5
public void Delete(int id) {}
}
我定义了以下路线...
config.Routes.MapHttpRoute(
name: "ActionRoutes",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional },
constraints: new
{
controller = "Avalanche",
action = "(ActionTest|ActionTest2|Test)"
}
);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
然后我最终定义了以下路线......
GET api/Avalanche/ActionTest/{id}
GET api/Avalanche/ActionTest2/{id}
PUT api/Avalanche/Test/{id}
GET api/Avalanche
POST api/Avalanche
DELETE api/Avalanche/{id}
为什么不选择默认 PUT 路由?默认 GET 和默认 PUT 的路由有什么不同?我已经尝试以各种可以想象的方式装饰这些功能,但我得到了相同的结果。
主要是我想知道如何获取默认的 PUT 路由。如果您对如何修改这些路由有任何建议,这样我就不必为每个控制器指定一个路由来指定动作名称,这也很棒。
谢谢!
伊恩
编辑:我今天早上注意到以下路线也没有被定义..
GET api/Avalanche/{id}