2014-01-05 3 views
0

C#에 익숙한 MVC 및 API 템플릿에 익숙하지 않습니다.컨트롤러의 중첩 된 함수

간단한 컨트롤러로 새로운 WebAPI 프로젝트를 만들 수 있습니다. /api/Clients/1과 같은 URL 경로는 둥지 컨트롤러를 정렬하는 방법이 있습니까? 또는 다음과 같은 URL 경로를 따라 동일한 컨트롤러에서 함수를 실행하십시오 : /api/Clients/1/Sysinfo/typeOf?

sysinfo 항목 인 등록 정보를 포함하는 모델 클라이언트가 있습니다./api/Clients/1은 ID가 1 인 개체 클라이언트의 모든 속성을 반환합니다. 예를 들어/api/Clients/1/Sysinfo/RAM과 함께 반환되는 특정 항목 만 원합니다.


@Joachim 로스 코프 은 그 접근 방식을 시도했다. 404/clients/1/works가됩니다./clients/1/sysinfo가 작동하지 않습니다.

다음과 같은 경로를 사용 :

새로운 컨트롤러 SysinfoController을 만든
 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 } 
     ); 

:

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에 익숙하다고 말했듯이, 그것은 단지 논리적 오류 일뿐입니다. sysinfo 항목 인 속성이 포함 된 모델 클라이언트가 있습니다./api/Clients/1은 ID가 1 인 개체 클라이언트의 모든 속성을 반환합니다. 예를 들어/api/Clients/1/Sysinfo/RAM과 함께 반환되는 특정 항목 만 원합니다. – z7gsr32cod586mic4a5e

답변

0

당신은 당신의 라우팅 구성을 조정하고 아동 경로에 대한 특별 항목을 추가해야합니다. 중첩 된 리소스를 처리하는 SysInfo 컨트롤러에 대한 특정 경로가 위의 예에서

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 } 
); 

: 먼저 가장 구체적인 경로를 추가하는 것이 중요하다. 뿐만 아니라 기본 경로.

GET -requests에 대한 작업과 함께 SysInfo 컨트롤러 내가 방법을 모르는

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에서 계층 능숙를 처리하기 위해 볼 수 있었다.

+0

FP가 업데이트되었습니다! 미리 Thx! – z7gsr32cod586mic4a5e

+0

답변에 SysInfoController 예제를 추가했습니다. –

관련 문제