在 ASP.NET Web api 项目中,我有一个 VacationController,我想在其中使用这些操作方法。我怎样才能构建实现这一目标的路线?
public Enumerable<Vacation> GetVacation()
{
// Get all vactions
return vacations;
}
public Vacation GetVacation(int id)
{
// Get one vaction
return vacation;
}
public Enumerable<Vacation> ByThemeID(int themeID)
{
// Get all vactions by ThemeID
return vacations;
}
我希望 URL 看起来像这样
/api/vacation // All vacations
/api/vacation/5 // One vacation
/api/vacation/ByThemeID/5 // All vacations from one theme
编辑 30-10-2013
我尝试过 Pasit R 路线,但无法上班。我真的尝试了我能想到的每一种组合。
这是我所知道的。如您所见,我在路线的开头添加了一个额外的参数。我意识到我需要这样才能将不同标签上出售的假期分开。
这是我使用的路线。并且这些 URL 的工作正常
/api/vacation // All vacations
/api/vacation/5 // One vacation
/api/vacation/ByThemeID/5 // All vacations from one theme
但它不适用于最后一个 URL
config.Routes.MapHttpRoute(
name: "DefaultApiSimbo",
routeTemplate: "api/{label}/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
这里是我在 VacationController 中的 Action 方法
// ByThemeID api/{label}/Vacation/ByThemeId/{id}
[HttpGet]
public IEnumerable<Vacation> ByThemeID(string label, int id)
{
return this.repository.Get(label);
}
// GET api/{label}/Vacation
public IEnumerable<Vacation> GetVacation(string label)
{
return repository.Get(label);
}
// GET api/{label}/Vacation/{id}
public Vacation GetVacation(string label, int id)
{
Vacation vacation;
if (!repository.TryGet(label, id, out vacation))
throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.NotFound));
return vacation;
}
有人可以推动我朝着正确的方向前进吗 ;-)
提前致谢
安德斯·佩德森