2014-11-30 3 views
1

내가 웹 API를 컨트롤러와 두 GET 방법이 발견되었다 :ASP.NET WebAPI 여러 작업은

public class ImagesController : ApiController { 
    [HttpGet] 
    public HttpResponseMessage GetImages() { } 

    [HttpGet] 
    public HttpResponseMessage Download([FromUri]int[] ids) { } 
} 

왜 내가 갖는 여러 작업 발견 오류를,/API/이미지를, 왜 모두에 도달 할 때 행동은 똑같은가?

답변

0

컨트롤러를 만들었 으면 HttpGet에 두 가지 방법을 할당했습니다. 요청을 처리하려고 할 때 웹 서버를 혼동하게 만듭니다. 컨트롤러에 직접 GET 동사를 보내므로 메서드 대신 직접 웹 서버는 호출 할 메서드를 결정할 수 없습니다.

/api/Images/GetImages으로 직접 시도하거나 표시된 방법 중 하나를 제거 할 수 있습니다.

+0

그러나 GetImages() 및 다음과 같은 경우 웹 서버가 혼동하지 않습니다. GetImagesById (int id) {} ​​ – user3450929

+0

GetImages()는 전체 이미지 목록을 반환합니다. 그리고'GetImageById'는 주어진 id에 대한 Image 인스턴스를 반환 할 것입니다. 기본적으로 '/ api/Images /'(GetImages)와'/ api/Images/10' (GetImagesById)의 두 가지 요청이 있습니다. – TheLittleHawk

+0

또한 쿼리 문자열 (/ api/Images? id = 10)을 사용하여 요청을 처리하는 경우 웹 서버는 처리 방법을 알고 있지만 다운로드 동작을 처리하는 방법을 모르는 이유는 무엇입니까? 예를 들어 다운로드 작업 만 남겨두면 왜 두 가지 요청을 보낼 수 있습니까?/api/Images는 아무 것도 반환하지 않지만 디버깅 할 때 동작합니다./api/Images? ids = 1 & ids = 2는 해당 ID가있는 이미지를 반환합니다. 내 질문에, 다운로드 (int [] ids)와 GetImages()가 함께 웹 서버를 혼동하지만 GetImages() 및 GetImagesById (int id)가 아닌 이유는 무엇입니까. – user3450929

0

웹 API 기능이 표시되면 GET, PUT, POST, DELETE와 같은 선택된 httm 메소드에서 작동합니다.

그래서 같은 이름의 두 가지 작업 메서드를 만들면 오류가 발생합니다. 이 오류를 방지하려면 route.config 파일에서 DefaultAPI 경로를 다시 정의해야합니다. 이 문제를 해결하는 경우 API/{컨트롤러}에

변경을 .....

변경 한 후이는 답변으로 또는

마크와 같은 브라우저에서 API를 액세서.