如何在API控制器中指定特定的URL ?
本文关键字:URL API 控制器 | 更新日期: 2023-09-27 18:09:08
现在,我的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
(或其他地方)可以访问。我怎么做?
根据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") }
);
如果你使用的是版本2,你仍然可以使用基于约定的路由,但是你也可以使用属性路由:
public class EventController : ApiController
{
[HttpGet]
[Route("event/thisweek")]
public List<HobbsEventsMobile.Models.Event> ICanNameThisWhateverIWant()
{
return HobbsEventsMobile.Models.Event.GetThisWeeksEvents();
}
}