12

ASP.NET MVC4 웹 API v1 컨트롤러는 아래와 같이 정의됩니다. 1 또는 2 개의 쿼리 문자열 매개 변수를 받아 들여야합니다.웹 API가 쿼리 문자열 매개 변수를 인식하도록 강제하는 방법

그러나 ko 매개 변수는 메서드가 호출되면 항상 null입니다. 요청은 아래에 있습니다. klient 또는 namepart 매개 변수를 쿼리 문자열로 전달할 수 있도록 수정하는 방법은 무엇입니까?

웹 API v1을 컨트롤러 : 컨트롤러는 요청에 의해 호출

namespace MyApp.Controllers 
{ 
    public class CustomersSearchViewModel 
    { 
     public string Klient { get; set; } 
     public string Namepart { get; set; } 
    } 


    [Authorize] 
    public class CustomersController : ApiController 
     { 

     public HttpResponseMessage Get(CustomersSearchViewModel ko) 
      { 
      // why ko is null ?   
      var res = GetCustomers(ko.Klient,ko.Namepart); 
      return Request.CreateResponse(HttpStatusCode.OK, 
        new { customers = res.ToArray() }); 
      } 

     } 
    } 

이 (APPL은 ERP virtal 디렉토리에서 실행) :

GET /erp/api/customers?namepart=kaks&_=1385320904347 HTTP/1.1 
Host: localhost:52216 
Connection: keep-alive 
Accept: application/json, text/javascript, */*; q=0.01 
X-Requested-With: XMLHttpRequest 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36 
Referer: http://localhost:52216/erp/Sale 
Accept-Encoding: gzip,deflate,sdch 
Accept-Language: et-EE,et;q=0.8,en-US;q=0.6,en;q=0.4 
Cookie: .myAuth=8B6B3CFFF3DF64EBEF3D258240D217C56603AF255C869FBB7934560D9F560659342DC4D1EAE6AB28454122A86C3CE6C598FB594E8DC84A; My_Session=5aw2bsjp4i4a5vxtekz 

기본 경로가 사용됩니다

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

응용 프로그램은 Windows 2003 서버를 이기고 실행해야하므로 Web API v.2를 사용할 수 없습니다.

업데이트 나는 또한

public HttpResponseMessage Get(string klient, string namepart) 

하지만 404 오류가 반환이 경우

시도, 액션 찾을 수 없습니다.

+0

매개 변수에'[FromUri]'속성을 시도 했습니까? –

답변

19

복합 유형은 요청의 본문에서 가져온하지만이 같은이 기본 동작을 변경할 수 있습니다

public HttpResponseMessage Get([FromUri]CustomersSearchViewModel ko) 

그렇지 않으면 작동하지 않습니다 바인딩 모델 속성과 같은 명명 된 매개 변수를 포함해야합니다 귀하의 쿼리 문자열 .

1

또 다른 옵션은 사용자 지정 형식 공급자를 구현하는 것입니다. 이렇게하면 쿼리 문자열의 표현을 제어 할 수 있으므로 액션 메서드에 [FromUri] 특성을 추가 할 필요가 없습니다. 복잡한 매개 변수 유형을 광범위하게 재사용하거나 사용자 지정 표현이 필요한 경우에 유용합니다.

좋은 예가 this blog post이고 위도와 경도가있는 위치가 두 기술을 사용하여 구현됩니다.