2014-02-18 2 views
1

엔티티 목록을 검색하는 GET() 컨트롤러가 있습니다.웹 API 2 컨트롤러가 QueryString 매개 변수를 허용하지 않습니다.

Mysite.com/Users?nameContains=john 

이 내 활동 정의입니다 :

The requested resource does not support http method 'GET'.

:

public IEnumerable<object> Get(string nameContains) 
{ 
    // I want to use nameContains here 
} 

내가 오류가 다음과 같이 나는 반환 개체의 목록을 필터링 할 작업에 매개 변수를 전달하려면

메서드를 되돌려 매개 변수를 가져 오지 않으면 작동합니다.

+0

본문 개체로 보내보십시오. 당신은 얻을 수 있습니다 – Amit

+0

경로를 정의하는 방법? – ssilas777

+0

@AmitAgrawal RESTful API 모범 사례를 준수하지 않기 때문에 나는하지 않을 것입니다. ssilas777 'config.Routes.MapHttpRoute @ ("DefaultApi" routeTemplate : 이름 "API/제어기 {}/{ID}" 기본값 : 새로운 ID = {} RouteParameter.Optional )' –

답변

1

는 웹 API 2에서 작업하기 때문에, 당신은 당신은 WebApiConfig 항목에 새 경로를 추가 할 수 있습니다 attribute routing

[Route("users")] 
public IEnumerable<object> Get([FromUri] string nameContains) 
{ 
+0

시도했지만 작동하지 않습니다. 같은 오류가 발생했습니다. –

0

를 사용할 수있다 또한이

public IEnumerable<object> Get([FromUri] string nameContains) 
{ 
    // I want to use nameContains here 
} 

을보십시오. 예를 들어

, 당신의 방법 정의 :

public IEnumerable<object> Get(string nameContains) 
{ 
    // I want to use nameContains here 
} 

추가 :

GET //<service address>/Api/Data/test 

을하거나 방법

HttpUtility.ParseQueryString를 사용

config.Routes.MapHttpRoute(
    name: "GetSampleObject", 
    routeTemplate: "api/{controller}/{nameContains}" 
); 

는 그 다음 HTTP 호출에 매개 변수를 추가

// uri: /Api/Data/test 
public IEnumerable<object> Get() 
{ 
    NameValueCollection nvc = HttpUtility.ParseQueryString(Request.RequestUri.Query); 
    var contains = nvc["nameContains"]; 
    // BL with nameContains here 
} 
+1

이렇게 할 필요가 없습니다. 쿼리 매개 변수 매핑이 작동합니다. –

1

죄송합니다. 실수로 2 개의 매개 변수를 사용했으며 그 중 하나를 전달하지 않았으며 (기본값도 지정하지 않았으므로) 오류가 반환되었습니다. 건배.

관련 문제