Web API控制器中比基本CRUD更复杂的URL

时间:2012-08-14 09:04:25

标签: c# .net asp.net-mvc asp.net-web-api

我看过的所有WebAPI示例都展示了如何使用控制器进行基本的CRUD设置。例如,下面的控制器在我的应用程序中显示campaigns的控制器:

public IEnumerable<CampaignModel> Get()
{
    return _campaignService.GetAll();
}

public CampaignModel Get(int id)
{
    return _campaignService.GetByID(id);
}

public void Post(CampaignModel campaign)
{
    _campaignService.Create(campaign);
}

public void Put(CampaignModel campaign)
{
    _campaignService.Update(campaign);
}

public void Delete(int id)
{
    _campaignService.Delete(id);
}

这一切都很好,我最终得到了一些好的端点,格式如下:

  • 获取广告系列/
  • 获取广告系列/ {id}
  • 发布广告系列/ {campaign}
  • PUT广告系列/ {campaign}
  • 删除广告系列/ {id}

但是,我现在想进一步扩展api并添加以下端点:

  • POST广告系列/发送
  • POST广告系列/时间表/ {date}

是否可以将这些作为与上述CRUD操作相同的控制器的一部分?或者我是否必须添加其他控制器,然后为每个端点设置路由?

1 个答案:

答案 0 :(得分:3)

here

上查看“按操作名称路由”
routes.MapHttpRoute(
    name: "ActionApi",
    routeTemplate: "api/{controller}/{action}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

public class CampaignsController : ApiController
{
    [HttpPost]
    public void send();

    [HttpPost]
    public void schedule(DateDto date);
}

将映射到“api / campaigns / send”和“api / campaigns / schedule”