如何在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(或其他地方)可以访问

我怎么做?

如何在API控制器中指定特定的URL ?

根据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();
    }
}