【问题标题】:POST parameter to web api being set as nullWeb api 的 POST 参数设置为 null
【发布时间】:2015-01-12 10:50:12
【问题描述】:

我正在尝试使用 ng-resource 将值发布到我的 web-api 并在 javascript 中取回该值。

虽然请求似乎顺利通过,但传递给我的函数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;
}

【问题讨论】:

  • 虽然症状略有不同,但问题可能是您从控制器返回 string 而不是 HttpResponseMessage。看我这里的回答,希望对你有帮助:stackoverflow.com/questions/27580145/…
  • 当我在return order; 设置断点并检查[FromBody]string order 的值时,它为空。所以看起来传递给AddOrder的值是null
  • 是的,我当时也有这个问题。我放弃并传递了一个包裹字符串的对象。
  • 看起来这正是我要做的,把它作为答案发布!

标签: javascript c# asp.net asp.net-web-api ngresource


【解决方案1】:

虽然我不确定是什么导致控制器中的字符串为空,但您可以发送一个包裹字符串的对象,而不是将字符串发送到 Web API 控制器,这样可以正确接受。

【讨论】:

    【解决方案2】:

    要将字符串发布到 Web api,它需要在前面加上 =。此外,请求中没有设置 Content-Type

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

    以上应该可以工作

    【讨论】:

    • 您是否尝试在控制器中放置断点并查看那里的值。
    • 是的,它似乎作为 null 传递给函数。我认为this 的问题是相关的
    • 我已经调整了答案,试一试
    • 运气不好
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-26
    • 1970-01-01
    • 1970-01-01
    • 2014-01-28
    • 2015-10-07
    • 1970-01-01
    • 2017-11-26
    相关资源
    最近更新 更多