2014-01-05 63 views
0

MVC和API模板的新手,熟悉C#。控制器中的嵌套函數

簡單的新WebAPI項目與一個簡單的控制器。網址路徑像/api/Clients/1,有沒有一種方法來排序巢控制器?或者按照下面的url路徑在同一個控制器中執行一個函數:/api/Clients/1/Sysinfo/typeOf

我有一個模型客戶端,其中包含屬性是sysinfo項目。/api/Clients/1返回ID爲1的對象客戶端的所有屬性。例如,我只想要以/ api/Clients/1/Sysinfo/RAM返回的特定項目。


@Joachim前往Rosskopf 我已經試過這種方法。它導致404. /客戶/ 1 /作品。/clients/1/sysinfo不起作用。

使用以下路線:

 routes.MapRoute(
      name: "Sysinfo", 
      url: "Clients/{id}/Sysinfo/{type}", 
      defaults: new { controller = "Sysinfo", type = UrlParameter.Optional } 
     ); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 

創建一個新的控制器SysinfoController:

public class SysinfoController : ApiController 
{ 
    public Sysinfo GetAllSysinfoItems() 
    { 
     return new Sysinfo { Id = 1, RAM = "1GB" }; 
    } 

    public IHttpActionResult GetSysinfoByType(int id) 
    { 
     return Ok(); 
    } 
} 
+0

你的意思是你想處理*這兩種類型的URL? – James

+0

控制器和路由上的這個鏈接可能有所幫助:http://www.asp.net/mvc/overview/controllers-and-routing – Markus

+0

是的。正如我說的,我是MVC的新手,maby這只是一個邏輯錯誤。我有一個模型客戶端,它包含sysinfo項目的屬性。/api/Clients/1返回ID爲1的對象客戶端的所有屬性。例如,我只想要以/ api/Clients/1/Sysinfo/RAM返回的特定項目。 – z7gsr32cod586mic4a5e

回答

0

你必須調整你的路由配置和添加特殊條目的子路由。添加的最具體的路線首先是很重要的:

routes.MapHttpRoute(
     name: "SysInfoApi", 
     routeTemplate: "api/Clients/{id}/Sysinfo/{param}", 
     defaults: new { controller = "SysInfo", param = RouteParameter.Optional } 
); 

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

在上面的例子有一個SysInfo控制器,它處理嵌套資源的特定路線。以及默認路線。

SysInfo控制器與GET -REQUESTS行動可能如下

public class SysInfoController : ApiController 
{ 
    // GET api/client/{id}/sysinfo/ 
    public string Get(int id) 
    { 
     return "value"; 
    } 

    // GET api/client/{id}/sysinfo/{param} 
    public string Get(int id, string param) 
    { 
     return "value"; 
    } 
} 

我不知道的方法在的WebAPI自動處理分層ressources。

+0

已更新FP! Thx提前! – z7gsr32cod586mic4a5e

+0

在答案中添加了一個SysInfoController示例。 –