2016-12-24 63 views
0

我试图创建在asp.net核心的多个级别路线,如:多层次Asp.NET路线

  • API /城市
  • API /城市/(编号)
  • API /城市/日期/ {日期和时间}

的问题是,当我尝试使用任何比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-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2

它说,你可以有这样的路线:

  • /命令/ 1
  • /命令/未决
  • /命令/ 2013/6月16日

而且有三个途径分别。但它似乎并没有对如何做到这一点特别提供的例子。

+0

在课程尝试RoutePrefix属性,而不是[RoutePrefix( “API /城市”)] –

回答

0

我可以看到路由的问题,因为你不能有“/”作为字符串的一部分。

尝试传递日期2013_06_16不2013/06/16或改变路线有日期/ {每年}/{月}/{}天

例如:

[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"; 
    } 
} 

希望这帮帮我。