URI                               Verb     Description                                                                                    
 /api/tasks GET Gets the full list of all tasks;
optionally specify a filter                  
/api/tasks/123 GET Gets the details for a single task
/api/tasks/123/status GET Gets just the status information
for the specified task
/api/tasks/123/status/456 PUT Updates just the status of
the specified task
/api/tasks/123/users DELETE Deletes all users from the
specified task
/api/tasks POST Creates a new task


route map

name: "TaskStatusApiRoute",
routeTemplate: "api/tasks/{taskId}/status/{statusId}",
defaults: new {controller = "TaskStatus", statusId =


public class TaskStatusController : ApiController
private readonly ISession _session;
private readonly IStatusMapper _statusMapper;
private readonly IHttpStatusFetcher _statusFetcher;
private readonly IHttpTaskFetcher _taskFetcher;
public TaskStatusController(
IHttpTaskFetcher taskFetcher,
ISession session,
IStatusMapper statusMapper,
IHttpStatusFetcher statusFetcher)
_taskFetcher = taskFetcher;
_session = session;
_statusMapper = statusMapper;
_statusFetcher = statusFetcher;

public Status Get(long taskId) { var task = _taskFetcher.GetTask(taskId); return _statusMapper.CreateStatus(task.Status); }
public void Put(long taskId, long statusId) { var task = _taskFetcher.GetTask(taskId); var status = _statusFetcher.GetStatus(statusId); task.Status = status; _session.Save(task); } }