2015-01-12 2 views
0

ng-resource을 사용하여 내 web-api에 값을 게시하고 자바 스크립트에서 값을 다시 가져 오려고합니다.웹 API에 대한 POST 매개 변수가 null로 설정되었습니다.

요청이 정상적으로 진행되는 동안 내 기능 public string AddOrder([FromBody]string order)에 전달되는 매개 변수는 null으로 설정되는 것으로 보입니다.

orderController.js

var result = $scope.store.sendOrder("hello"); 

store.js

function store($resource) { 

    var Resource = $resource('/api/products/'); 
    this.products = Resource.query(); 

    this.sendOrder = function (order) { 

     var sendOrder = $resource('/api/products'); 

     var result = sendOrder.save("Helloa"); <--- 

     return result; 
    } 
} 

ProductController.cs

[Route("api/products")] 
[HttpPost] 
public string AddOrder([FromBody]string order) 
{ 
    return order; //When I put a breakpoint here and check the value of order, it is null. 
} 

원시 요청

POST http://localhost:12345/api/products HTTP/1.1 
Host: localhost:12345 
Connection: keep-alive 
Content-Length: 6 
Accept: application/json, text/plain, */* 
Origin: http://localhost:12345 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 
Content-Type: application/json;charset=UTF-8 
Referer: http://localhost:12345/Home/Cart 
Accept-Encoding: gzip, deflate 
Accept-Language: en-GB,en;q=0.8,es;q=0.6,en-US;q=0.4 
Cookie: ai_user=fc592beca77b4a5e8c4a95db221a574a|2014-12-04T18:36:22.7128874+00:00 

hello 
,451,515,

원시 응답

HTTP/1.1 200 OK 
Cache-Control: no-cache 
Pragma: no-cache 
Content-Type: application/json; charset=utf-8 
Expires: -1 
Server: Microsoft-IIS/8.0 
X-AspNet-Version: 4.0.30319 
X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNcbXJ5YW4uQVNBVklFXERvY3VtZW50c1xleHByZXNzb1xFeHByZXNzb1x3ZWJzaXRlc1xjb25zdW1lclxhcGlccHJvZHVjdHM=?= 
X-Powered-By: ASP.NET 
Date: Mon, 12 Jan 2015 10:45:03 GMT 
Content-Length: 4 

null 

누구나 어떤 아이디어가?

편집 다음과 같이 가장 빠른/가장 쉬운 해결책은 객체에 문자열을 포장했다

:

Order.cs

public class Order 
{ 
    public string order { get; set; } 
} 

ProductController.cs

[Route("api/products")] 
[HttpPost] 
public Order AddOrder([FromBody]Order order) 
{ 
    return order; 
} 
+0

증상이 약간 다르긴하지만 문제는 'HttpResponseMessage' 대신 컨트롤러에서'string'을 반환하는 것일 수 있습니다. 내 대답을 봐, 여기 당신을 돕기 바랍니다 : http://stackoverflow.com/questions/27580145/how-to-deal-with-string-primites-in-angularjs-and-http/27580296#27580296 –

+0

내가 넣을 때 'return order;에 중단 점을 넣고'[FromBody] string order'의 값을 확인하면 null입니다. 그래서 그것은 AddOrder에 전달되는 값이 null 인 것 같습니다. – TomSelleck

+0

그래, 그 때도 그 문제가있었습니다. 저는 포기하고 대신 문자열을 감싸는 객체를 전달했습니다. –

답변

1

작동합니다 문자열 대신 올바르게 받아 들여질 것입니다.

0

웹에 문자열에 게시하려면 API 앞에는 =이 있어야합니다. 요청시 Content-Type도 설정되어 있지 않습니다. 내가 문자열을 사용하면 객체가 포장 보낼 수 대신 웹 API 컨트롤러에 문자열을 게시의 컨트롤러에 null의 원인이 무엇인지 잘 모르겠어요하지만

var sendOrder = $resource('/api/products',{}, { query: {method:'POST', headers: {'Content-Type': 'application/json'}); 

    var result = sendOrder.save("=" + "Helloa"); 

위는

+0

답장을 보내 주셔서 감사합니다. 그건 불행히도하지 않았어 .. – TomSelleck

+0

컨트롤러에 중단 점을 넣고 그 값을 보았습니까? –

+0

그래, 그것은 null로 작동하도록 전달 된 것으로 보입니다. 나는이 [이] (http://stackoverflow.com/questions/21035849/asp-net-web-api-post-parameter-is-null?rq=1) 질문 관련이 있다고 생각합니다 – TomSelleck