我正在尝试在ASP.NET核心中创建多个级别路由,例如:
- api/cities
- api/cities/{id}
- api/cities/date/{date}
问题是,当我尝试使用比api/cities/{id}
更长的时间时,我只得到404。
我的控制器:
[Route("api/[controller]")]
public class CitiesController : Controller
{
private ICityRepository _repository;
public CitiesController(ICityRepository repository)
{
_repository = repository;
}
// GET: api/cities
[HttpGet]
public IEnumerable<City> Get()
{
IEnumerable<City> results = _repository.GetCities();
return results;
}
//api/cities/date/{date}
[HttpGet]
[Route("date/{date}")]
public IEnumerable<City> Get2(string date)
{
return _repository.GetCitiesByDate(date);
}
// GET api/cities/5
[HttpGet("{id: int}")]
public string Get(int id)
{
return "value";
}
}
我需要做什么才能在此控制器下获得更长的路线才能工作?
编辑:
我在此处查看文档:https://www.asp.net/web-papi/web-api/web-api-routing-and-and-actions/attribute-routing-in-web-api-2
它说您可以有:
之类的路线- /orders/1
- /订单/待处理
- /orders/2013/06/16
并分别具有三个路线。但这似乎并没有提供有关您如何做到这一点的示例。
我可以看到路由的问题,因为您不能拥有"/"作为字符串的一部分。
尝试将日期传递为2013_06_16不是2013/06/16或更改拥有日期的路线/{年}/{月}/{day}
示例:
[Route("api/[controller]")]
public class CitiesController : Controller
{
private ICityRepository _repository;
public CitiesController(ICityRepository repository)
{
_repository = repository;
}
// GET: api/cities
[HttpGet]
public IEnumerable<City> Get()
{
IEnumerable<City> results = _repository.GetCities();
return results;
}
//api/cities/date/2016/06/16
[HttpGet]
[Route("date/{year}/{month}/{day}")]
public IEnumerable<City> Get2(string year,string month,string day)
{
string date = year + "/" + month + "/" + day;
return _repository.GetCitiesByDate(date);
}
// GET api/cities/5
[Route("{id: int}")]
[HttpGet]
public string Get(int id)
{
return "value";
}
//api/cities/pending
[Route("{text}"]
[HttpGet]
public string Get(string text)
{
return "value";
}
}
希望这个帮助。