2016-07-18 1 views
0

이것은 asp.net 5/mvc에서입니다. 6. 두 개의 컨트롤러 메서드가 있습니다. 각각 단일 매개 변수를 사용하고 각각은 문자열을 반환합니다. 하나의 메소드는 문자열 매개 변수를 사용하고 다른 메소드는 간단한 객체를 사용합니다. string 매개 변수를 사용하는 메서드가 작동하지 않습니다 (들어오는 매개 변수의 값은 항상 null입니다). 단순 개체에서 전달되는 호출이 작동합니다. $ HTTP 서비스를 사용하여 각 컨트롤러 내부에서 이러한 메서드를 호출합니다. 나는 아주 단순한 무엇인가 잘못하고있을 것임에 틀림 없다. 그러나 나는 그것을 보지 못한다.asp.net 경로의 문제는 무엇입니까

다음
[Route("api/[controller]")] 
public class ValuesController : Controller 
{ 
    [HttpPost("PostWithStringParam")] 
    public string PostWithStringParam([FromBody] string val) 
    { 
     return val ?? "<null>"; 
    } 

    [HttpPost("PostWithInputparam")] 
    public string PostWithInputParam([FromBody] TestInputClass val) 
    { 
     string ret = "<null>"; 

     if (val != null) 
     { 
      ret = $"First Name: {val.Name}, City: {val.City}"; 
     } 

     return ret; 
    } 
} 

가 각 컨트롤러에서 관련 코드입니다 : 여기

컨트롤러 클래스에 대한 코드입니다. "go"기능은 버튼에서 ng-click으로 연결되어 있습니다.

vm.inputObject = { 
     name: "George", 
     city: "Chicago" 
    } 

    vm.inputString = "some data"; 

    var callApi = function(url, data) { 

     $http({ 
      method: "POST", 
      url: url, 
      data: data 
     }).then(
      function (result) { 
       alert(result.data); 
      }, 
      function (error) { 
       alert(error.status); 
      } 
     ); 
    } 

    var callStringApi = function() { 

     var url = "api/values/PostWithStringParam"; 

     callApi(url, vm.inputString); 
    } 

    var callObjectApi = function() { 

     var url = "api/values/PostWithInputParam"; 

     callApi(url, vm.inputObject); 
    } 

    vm.go = function() { 

     callStringApi(); 
     callObjectApi(); 
    } 

입력 문자열을받는 방법이 작동하지 않는 이유는 누구에게 말해주십시오.

감사합니다.

+0

간단한 유형으로 [FromBody]를 사용하는 이유는 무엇입니까? – aguetat

답변

1

데이터를 보낼 때 contentType을 application/json으로 지정해야합니다. 그러면 기본 모델 바인더에서 게시 된 데이터를 매핑 할 수 있습니다.

var callApi = function(url, data) { 

    $http({ 
     method: "POST", 
     url: url, 
     data: JSON.stringify(data), 
     contentType:"application/json" 
    }).then(
     function (result) { 
      alert(result.data); 
     }, 
     function (error) { 
      alert(error.status); 
     } 
    ); 
} 
+1

이것이 효과가 있습니다!. 감사. –

+0

차가움. [Here] (http://stackoverflow.com/questions/20226169/how-to-pass-json-post-data-to-web-api-method-as-object)는 모든 사용 사례를 포괄하는 광범위한 게시물입니다. 웹 API에 게시 – Shyju