0

我使用的Web API進行故事的名單,我想這樣做:Asp.Net的MVC Web阿比路由問題

  1. 列表GetAllTales()= API /故事/
  2. 故事GetTale(INT ID) = API /故事/ 1
  3. 列表GetAllTalesByCategory(串類別名)= API /故事/孩子
  4. 故事GetTalesByCategoryAndId(串類別名稱,INT ID)= API /故事/小孩/ 1

我做nt知道什麼可以做到這一點,或者我可以在路由配置中改變什麼?

我TalesController:ApiController

public IEnumerable<Tale> GetAllTales() 
    { 
     return TaleService.FindAllTale(); 
    } 
public IEnumerable<Tale> GetAllTalesByCategory(string categoryName){} 

    public Tale GetTale(int id) 
    { 
     Tale item = TaleService.FindByTaleId(id); 
     if (item == null) 
     { 
      throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.NotFound)); 
     } 

     return item; 
    } 

它我WebApiConfig

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

     config.Routes.MapHttpRoute(
      name: "ApiByName", 
      routeTemplate: "api/{controller}/{name}", 
      defaults: null, 
      constraints: new { name = @"^[a-z]+$" } 
     ); 

一些示例爲我的目標:http://www.bbc.com/news/ - http://www.bbc.co.uk/news/technology/

回答

0

使用[HttpPost][HttpGet]屬性,並與指定動作的名稱[ActionName("Your Action Name")]

// api/tales/getall 
[HttpGet] 
[ActionName("getall")] 
public IEnumerable<Tale> GetAllTales() 
{ 
    return TaleService.FindAllTale(); 
} 

像這樣,你可以用適當的屬性來修飾所有的動作,讓它按預期工作。

編輯

您可以參考此答案創建多個路由Routing in Asp.net Mvc 4 and Web Api

+0

感謝您的回答。我知道了,我改變了我的代碼,但是如果我寫「/ api/tales/kids」這個請求使用GetTale(int id)。我沒有使用[ActionName]和GetAllTalesByCategory函數。因爲這個功能有很多東西(娛樂......)。我認爲我必須編寫diffirent MapRoute。 – BerdaN

+0

看到我的編輯它有一個SO問題,可以幫助您創建多個路線。 –

+0

我看到並嘗試類似的東西,但我沒有做到這一點。所以我改變了一點我的問題。現在它更容易理解。 – BerdaN

0
config.Routes.MapHttpRoute(
     name: "DefaultApiAction", 
     routeTemplate: "api/{action}/{name}/{controller}/{resourceId}", 
     defaults: new { resourceId= RouteParameter.Optional } 
     constraints: new { name = @"^[a-z]+$" } 
    ); 

也許你可以嘗試定義這條路線,並添加ActionName安託一樣的答案。