33

Tôi có thể sử dụng quy tắc hai tuyến đường sau đây cùng nhau không?Định tuyến trong Asp.net Mvc 4 và Web Api

config.Routes.MapHttpRoute(
    name: "ActionApi", 
    routeTemplate: "api/{controller}/{action}/{id}", 
    defaults: new { id = RouteParameter.Optional }); 

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

Say bởi bộ điều khiển là = FruitApiController:ApiController và tôi muốn có những điều sau

  1. List<Fruit> Get() = api/FruitApi/

  2. List<Fruit> GetSeasonalFruits() = api/FruitApi/GetSeasonalFruit

  3. Fruit GetFruits(string id) = api/FruitApi/15

  4. Fruit GetFruitsByName(string name) = api/FruitApi/GetFruitsByName/apple

Xin hãy giúp tôi về vấn đề này. Cảm ơn

+0

thú vị. tôi đoán là bộ điều khiển/id sẽ sử dụng hành động index() mặc định. – Ammar

+0

Có thể trùng lặp [Định tuyến Api Web cho nhiều phương thức Nhận trong ASP.NET MVC 4] (http://stackoverflow.com/questions/12775590/web-api-routing-for-multiple-get-methods-in-asp- net-mvc-4) – Skuld

Trả lời

52

Bạn có thể có một vài tuyến đường:

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     config.Routes.MapHttpRoute(
      name: "ApiById", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional }, 
      constraints: new { id = @"^[0-9]+$" } 
     ); 

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

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