2013-11-01 2 views
5

간단한 jquery ajax를 WEB API 메소드로 호출하려고합니다.Jquery Ajax Call to WEB API

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> 
<script type="text/javascript"> 

    $(document).ready(function() { 

     $.ajax({ 
      type: 'POST', 
      url: 'http://redrock.com:6606/api/values/get', 

      dataType: "jsonp", 

      crossDomain: true, 
      success: function (msg) { 

       alert("success"); 

      }, 
      error: function (request, status, error) { 

       alert(error); 
      } 
     }); 
    }); 

</script> 

웹 API 액션 :

public IEnumerable<string> Get() 
    { 
    return new string[] { "value1", "value2" }; 
    } 

아약스 호출이 웹 API를 타격하지 않습니다. 브라우저 콘솔에서 아래 오류가 나타납니다.

는 GET http://redrock.com:6606/api/values/get?callback=jQuery18207315279033500701_1383300951840&_=1383300951850 400 (잘못된 요청)

답변

2

당신은 경로 설정을위한 코드를 포함하지만 올바른 가정하지 않은, 문제가 아마 당신이 당신의 이름는 사실 WebApi 방법 '가져 오기로 인해 발생 'POST 요청을 사용하여 공격을 시도하는 동안. 이것은 WebApi가 동작 이름에서 HTTP 동사를 파악하려고하기 때문에 발생합니다.

조치 이름을 바꾸거나 조치 방법에 [HttpPost] 속성을 추가하는 것이 좋습니다. WebApiRouteDebugger 패키지를 사용해보십시오.

+0

HttPost를 사용해 보았지만 행운이 없었습니다 – chamara

2

크로스 도메인 호출을하지 않는 한 jsonp를 사용할 필요가 없습니다. jsonp는 웹 API에서 사용자 정의 포맷터가 필요합니다.

$.getJSON('http://redrock.com:6606/api/values', function(data){ 
    console.log(data); 
}); 

편집 : 포맷터를 등록

  • 업데이트를
  • 을 nuget 사용하여 포맷터를 다운로드 https://github.com/WebApiContrib/WebApiContrib.Formatting.Jsonp

    • :

      이 프로젝트에서 봐 가지고하는 JSONP 미디어 타입 포맷터를 설치하려면 귀하의 routeconfig

  • +0

    안녕하세요! 교차 도메인 호출을해야합니다. – chamara

    +0

    동일한 도메인에서 일반 get을 수행하고 jsonp에 대한 미디어 유형 포맷터를 설정했으면 API가 데이터를 반환합니까? – Francis

    +0

    'json'과 동일한 도메인 및 데이터 유형에서 URL을 "/ controller/action"으로 사용할 때 작동합니다. jsonp 포맷터에 대해 잘 모르겠습니다. – chamara