【发布时间】:2015-10-05 22:22:45
【问题描述】:
我知道有很多(已回答)与基于属性的路由相关的问题,但我似乎找不到一个可以回答我的特定场景的问题。
我有一个 WebAPI 2 控制器,有几个使用默认路由的方法:
public Dictionary<int, SensorModel> Get()
{
return SensorModel.List();
}
public SensorModel Get(int id)
{
return SensorModel.Get(id);
}
[HttpPost]
public SensorModel Post(SensorModel model)
{
if (model == null) throw new Exception("model cannot be null");
if (model.Id <= 0) throw new Exception("Id must be set");
return SensorModel.Update(model.Id, model);
}
这些都可以正常工作。我正在尝试创建如下嵌套路由:
[Route("sensor/{id}/suspend")]
public SensorModel Suspend(int id, DateTime restartAt, EnSite site)
{
return SensorModel.Suspend(id, restartAt, site);
}
我希望 URL 看起来像这样:
http://[application_root]/api/sensor/1/suspend?restartAt={someDateTime}&site={anInt}
抱歉,忘了说实际问题是 404! 谁能告诉我我做错了什么?我知道我可以这样做:
[Route("sensor/suspend")]
public SensorModel Suspend(int id, DateTime restartAt, EnSite site)
{
return SensorModel.Suspend(id, restartAt, site);
}
这使得网址:
http://[application_root]/api/sensor/suspend?id=1&restartAt={someDateTime}&site={anInt}
但我认为,更简洁的 API 设计似乎是嵌套路由。
【问题讨论】:
标签: asp.net asp.net-web-api asp.net-web-api2 asp.net-web-api-routing