2014-07-16 7 views
0

ApiController 구현을 시작합니다. 여러 인수 및 다양한 반환 형식을 사용하여 여러 함수를 가져 왔습니다.ApiController : 동일한 인수이지만 다른 반환 값을 얻으십시오.

실제로 저는 서비스 클래스가 있으며 모든 서비스 하나에 대해 get 함수를 구현합니다.

문제는 동일한 컨트롤러에서 같은 인수를 사용하지만 다른 형식을 반환하는 두 가지 기능이 있다는 것입니다. 예 :

 [HttpGet] 
    string Get(String item){ return "Test";} 
    [HttpGet]   
    int Get(String entry){ return 2;} 

Visual Studio에서 이러한 함수가 유사하기 때문에 컴파일을 시작할 수 없습니다. 이 문제를 해결하려면 어떻게해야합니까?

+0

동일한 메소드 서명이지만 다른 리턴 유형을 갖는 메소드를 작성할 수는 없습니다. 이것은 C# 스펙에서 설계된 것입니다. –

답변

0

Get 함수에 이름을 지정할 필요가 없습니다.

당신이 그 이름을 지정할 수 있습니다

..

GetItem 

다른 사람들처럼

GetEntry 
+0

고마워, 나는 그것을하려고 노력했다. 그러나 내가 사이트를 발사 할 때 다수의 입구가있다. .. – makertoo

0

은 당신이 당신의 방법에 대한 다른 이름을 선택해야 말했다.

감사합니다, 나는 ... 그것을 시도하지만이 사이트를 시작할 때 여러 항목이 있다고

글쎄, 난 GET mywebsite.com/MyController/123을 요청할 경우 두 가지 방법 중 어느

를 호출 할 것인가?

ASP.NET은 각 메서드에 대해 하나씩 두 개의 사용자 지정 경로를 만들어야 호출 할 수 있습니다. 당신의 WebApiConfig.cs

config.Routes.MapHttpRoute(
      name: "GetItem", 
      routeTemplate: "api/MyController/Item/{item}", 
      defaults: new {controller = "MyController", action = "GetItem"} 
      ); 

    config.Routes.MapHttpRoute(
      name: "GetEntry", 
      routeTemplate: "api/MyController/Entry/{entry}", 
      defaults: new {controller = "MyController", action = "GetEntry"} 
      ); 

에 추가 할 그리고 당신은 가져 오기의 원리를 무시하는, 다른 결과를 반환 2 개 가져 오기 방법을 필요로하는 이유는 조금 확실치 MyController/Item/123

0

MyController/Entry/123에 GET 요청을 발행하여 그들에게 전화 웹 API 용 메소드. 한 컨트롤러는 get 메서드에 대해 한 가지 유형의 개체 만 반환해야합니다. 이것이 바로 웹 API라고하는 이유입니다. 당신이 정말로이 다음 중 하나 가져 오기 방법 및 반환 대상에 포장 여러 데이터를 사용하여이 작업을 수행 할 수 필요한 경우

그러나 다시 -

이 같은
public class WData{ 
    public string Item {get;set;} 
    public int Entry {get;set;} 
} 

public class RQuery 
{ 
    public string item { get; set; } 
    public string entry { get; set; } 
} 


public IHttpActionResult Get ([FromUri] RQuery query) 
{ 
    WData data = new WData(); 

    if (!String.IsNullOrEmpt(query.item)) 
     data.Item = "Test"; 

    if (!String.IsNullOrEmpt(query.entry)) 
     data.Entry = 2; 

    return Ok(data); 
} 

뭔가 일할 수 있습니다. 나는 코드를 테스트하지 않았다. 그러나 일해야합니다.

관련 문제