现在,我的API控制器有两个方法:一个用于获取所有事件,另一个用于获取一个事件。
namespace HobbsEventsMobile.Controllers
{
public class EventController : ApiController
{
// GET api/event
[HttpGet]
public List<HobbsEventsMobile.Models.Event> Get()
{
return HobbsEventsMobile.Models.Event.GetEventSummary();
}
// GET api/event/5
[HttpGet]
public HobbsEventsMobile.Models.Event Get(int id)
{
return HobbsEventsMobile.Models.Event.GetEventDetails(id);
}
}
}
新请求的功能要求我添加一种方法来调用本周的事件。我有一个存储过程和一个方法来调用它,但我不知道如何指定URL。我想补充一点:
[HttpGet]
public List<HobbsEventsMobile.Models.Event> Get()
{
return HobbsEventsMobile.Models.Event.GetThisWeeksEvents();
}
但可以在m.mydomain.com/api/event/thisweek
(或其他内容)访问它。 我该怎么做?
答案 0 :(得分:2)
根据您正在运行的ASP.NET Web API版本,您有两种不同的选项。如果您使用的是版本1,则只需遵循基于约定的路由并使用:
public class EventController : ApiController
{
[HttpGet]
public List<HobbsEventsMobile.Models.Event> ThisWeek()
{
return HobbsEventsMobile.Models.Event.GetThisWeeksEvents();
}
}
您还需要修改路由定义以支持操作名称(默认情况下,框架会根据HTTP谓词选择方法):
config.Routes.MapHttpRoute(
"DefaultApiWithId",
"api/{controller}/{id}",
new { id = RouteParameter.Optional }, new { id = @"\d+" }
);
config.Routes.MapHttpRoute(
"DefaultApiWithAction",
"api/{controller}/{action}"
);
config.Routes.MapHttpRoute(
"DefaultApiGet",
"api/{controller}",
new { action = "Get" },
new { httpMethod = new HttpMethodConstraint("GET") }
);
如果你使用的是第二版,你仍然可以使用基于约定的路由,但你也可以使用属性路由:
public class EventController : ApiController
{
[HttpGet]
[Route("event/thisweek")]
public List<HobbsEventsMobile.Models.Event> ICanNameThisWhateverIWant()
{
return HobbsEventsMobile.Models.Event.GetThisWeeksEvents();
}
}