2016-12-24 105 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"; 
    } 
} 

希望這幫幫我。