Skip to main content
 首页 » 编程设计

c#之创建多个具有相同签名的 Web Api

2024年05月06日41yjmyzz

我有一个 CAR Controller 并创建我的 API 以获取汽车列表以及 GRID 中每辆汽车的详细信息并且工作正常。

现在我正在为汽车创建一个 ListTree 并且只需要基本的细节。 ID 和颜色

我如何在当前 Controller 中创建另一个具有相同签名的方法 GetSimpleCar() 或者我应该创建另一个 Controller CarSimple

目前我有:

public List<dtoCar> Get() 
{ 
   List<dtoCar> result = db.cars.Select( 
                                 r => new dtoCar 
                                 { 
                                   Car_ID = r.car_id, 
                                   X = r.x, 
                                   Y = r.y, 
                                   RoadName = r.rto.name, 
                                   Azimuth = (int)r.avl.azimuth, 
                                   Color = r.Color, 
                                   DateTime = r.datetime.Value,  
                                   Geom = r.geomtext 
                                 }).ToList(); 
   return result; 
} 

我不想使用当前的 API 来创建树。

$('#ajax').jstree({ 
    'core': { 
        'data': { 
         -- RIGHT NOW 
            "url": "http://localhost/TreeTest/api/Cars/" 
                                                  ^^    
                                                 Controller 
         -- DESIRE CHANGE 
            "url": "http://localhost/TreeTest/api/Cars/GetSimpleCar" 
                                                            ^^  
                                                       Second Method? 
        }  
    }, 
    "checkbox": { 
        "keep_selected_style": false 
    }, 
    "plugins": ["wholerow", "checkbox"] 
}); 

请您参考如下方法:

你可以像这样在同一个 Controller 中设置固定路由:

using System.Web.Http; 
...     
[HttpGet] 
[Route("api/Cars/GetSimpleCar")] 
public object GetCarsButOnlyIdAndColor() 
{ 
    return db.cars.Select(r => new 
    { 
        Car_ID = r.car_id, 
        Color = r.Color, 
    }).ToList(); 
} 

WebApi 不关心方法的名称,重要的是路由。

就像 vendettamit 说的,你需要 Enable Attribute Routing

文档:

Routing and Action Selection in ASP.NET Web API

Attribute Routing in ASP.NET Web API 2