2013-12-13 209 views
1

我試着在Web Api上做些什麼。首先,我會分享我的WebApiConfigAsp.Net Mvc Web Api路由404

config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional }, 
      constraints: new { id = @"^[0-9]+$" } 
     ); 

     config.Routes.MapHttpRoute(
      name: "ApiCategory", 
      routeTemplate: "api/tales/{category}/{id}", 
      defaults: new { controller = "Tales", id = RouteParameter.Optional}, 
      constraints: new { category = @"^[a-z]+$" } 
     ); 

我讀到這issue和我解決我的apiconfig文件。我的目的是這樣的:

  1. 列表GetAllTales()= API /故事/ - > 404未找到
  2. 故事GetTale(INT ID)= API /故事/ 1 - 確定>!
  3. List GetAllTalesByCategory(string categoryName)= api/tales/kids - >好的!
  4. Tale GetTalesByCategoryAndId(string categoryName,int id)= api/tales/kids/1 - > Ok!

如果妳不知道我ApiController

[HttpGet] 
    public Tale GetAllTalesByCategoryAndId(string category, int id){} 

    [HttpGet] 
    public IEnumerable<Tale> GetAllTalesByCategory(string category){} 

    [HttpGet] 
    public IEnumerable<Tale> GetAllTales(){} 

    [HttpGet] 
    public Tale GetTale(int id){} 

感謝所有的答覆。

+0

將您的自定義路線放在默認路線之前,或者默認路線將提取您的請求。 –

+0

其實我不明白。 İf我把costum路線/ api /故事/孩子給出了一個錯誤。因爲這發送請求GetTale(int id)。 – BerdaN

回答

1

您需要切換路線順序。默認路由將在您未指定id(api/tales)時處理請求,因此您需要在此之前放置您的自定義路由。

config.Routes.MapHttpRoute(
     name: "ApiCategory", 
     routeTemplate: "api/tales/{category}/{id}", 
     defaults: new { controller = "Tales", 
         id = RouteParameter.Optional, 
         category = RouteParameter.Optional}); 

config.Routes.MapHttpRoute(
     name: "DefaultApi", 
     routeTemplate: "api/{controller}/{id}", 
     defaults: new { id = RouteParameter.Optional }, 
     constraints: new { id = @"^[0-9]+$" } 
    ); 
+0

我明白了。我怎樣才能切換路線?正如你所說我沒有使用默認路由約束。但如果我能做到(刪除約束)/ api/tales/kids發送請求GetTale(int id)。我不知道我該如何修復它。 – BerdaN

+0

@BerdaN在你的代碼中改變他們的順序,就像我的答案一樣。 –

+0

其實我沒有自定義路線。我有兩條路線,它在這裏:/ – BerdaN