Javascript 从angularJS到c#Web api的http.post简单对象为null或所有属性为null

Javascript 从angularJS到c#Web api的http.post简单对象为null或所有属性为null,javascript,c#,angularjs,asp.net-web-api,Javascript,C#,Angularjs,Asp.net Web Api,首先,我承认这里有很多问题与我的问题相近,但我已经尝试了我能找到的每一个解决方案,所以我仍然被卡住了 我在My Service.js中的服务方法如下,并附有注释 postSimpleObject: function () { // Have tried this first, and have passed // as JSON.stringify(simpleObject) var simpleObject = { name: "J Doe",

首先,我承认这里有很多问题与我的问题相近,但我已经尝试了我能找到的每一个解决方案,所以我仍然被卡住了

我在My Service.js中的服务方法如下,并附有注释

postSimpleObject: function () {

    // Have tried this first, and have passed
    // as JSON.stringify(simpleObject)
    var simpleObject = {
        name: "J Doe",
        colour: "Red"
    };

    // tried to pass this next
    var simplerObject = '{ "Name": "J Done", "Colour":"Red"}';

    // escaped the quotations and tried this next
    var simplerObject2 = '{ \"Name\": \"J Done\", \"Colour\":\"Red\"}';

    return $http.post(apiUrl + "PostSimpleObject?item=" + JSON.stringify(simpleObject), {
        headers: {
            'Content-Type': 'application/json'
        }
    });
}
这是我在API端的API控制器函数

public class CrudUserApiController : ApiController
{

    [System.Web.Http.HttpPost]
    public void PostSimpleObject(SimpleObject item)
    {
        var itemReceived = item;
    }    
}
我的简单对象类,在api方面

public class SimpleObject
{
    public string Name { get; set; }
    public string Colour { get; set; }

}
现在,发生的是

  • 触发API方法后,路由可以定位控制器和方法
  • 收到的模型/对象是一个新的SimpleObject,两个成员的属性均为null
根据服务中的注释,我尝试传递一个字符串化对象、一个json字符串和一个转义的json字符串

在API方面,我还尝试在签名中的SimpleObject参数前面使用[FromBody]属性。同样的事情也会发生


我完全迷路了,非常感谢你的帮助。谢谢

出于一些原因,例如查询字符串长度限制,建议将内容发布在正文而不是查询字符串上

也就是说,如果您坚持使用querystring,则需要告诉WebAPI使用
FromUri
属性查找querystring中的数据,因为默认值是主体:

[System.Web.Http.HttpPost]
public void PostSimpleObject([FromUri]SimpleObject item)
{
    var itemReceived = item;
}    
或者,您也可以按照ex0dm3nt的要求将内容直接发布到正文中:

$http.post(apiUrl + "PostSimpleObject", simpleObject);

只需将
simpleObject
作为
$post
请求中的第二个参数传递,如下所示:

postSimpleObject: function () {
    var simpleObject = {
        name: "J Doe",
        colour: "Red"
    };

    return $http.post(apiUrl + "PostSimpleObject", simpleObject);
}

为什么要将数据附加到URI?你试过这个吗?您是否尝试过
$http.post(APIRL+“PostSimpleObject”、simpleObject、{headers:{'Content Type':'application/json'}
?将数据作为参数传递(名为
)有何原因?@ex0dm3nt完全正确。非常感谢。非常感谢。我不知道为什么我要使用查询字符串-事实上我不知道你可以那样直接传递正文。@aeoptude欢迎你!从技术上讲,这两种方法大部分时间都有效,但正文通常是帖子和p的预期数据机制uts。