2015-01-12 3 views
0

Я пытаюсь использовать ng-resource для POST значения для моего веб-api и получить значение обратно в javascript.Параметр POST для web api устанавливается как 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 

сырье ответ

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

Хотя немного отличается от симптомов, проблема может заключаться в том, что вы возвращаете 'string' из своего контроллера вместо' HttpResponseMessage'. Посмотрите на мой ответ здесь, надеюсь, он вам поможет: 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', равно нулю – TomSelleck

+0

Да, у меня были проблемы с этим тоже в то время. Я сдался и передал объект, обертывающий строку вместо этого. –

ответ

1

Хотя я не уверен, что приводит к тому, строка будет пустой в контроллере, вместо того, чтобы разместить строку в контроллер Web API вы можете отправить объект подведению string, и это будет принято правильно.

0

Опубликовать в строке в Интернете api ему должно предшествовать =. Также нет Content-Type, установленного по запросу.

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

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

выше должны работать

+0

Спасибо за ответ. Это не сделало этого, к сожалению. – TomSelleck

+0

Вы пробовали поставить контрольную точку в контроллере и увидеть там значение. –

+0

Да, оно, кажется, передано в функцию как null. Я думаю, что вопрос [this] (http://stackoverflow.com/questions/21035849/asp-net-web-api-post-parameter-is-null?rq=1) связан с – TomSelleck

Смежные вопросы