如何将对象发布到Web API

时间:2015-01-09 21:46:07

标签: javascript angularjs asp.net-web-api

我试图找出如何将表单中的对象发布到web api服务。在我的控制器中,我定义了一个我想要添加输入值的模型。

$scope.Label;

在我的输入字段中,我使用ng-model绑定它们,例如:

<input type="checkbox" ng-model="label.isPublic" />
<input type="text" ng-model="label.labelName" required focus-me />

在提交表单时,这两个字段传递给我的服务并提交给我的WebApi

我已经通过两种方式尝试过这个提交:

function addLabel(label) {
        var mylabel = encodeURIComponent(angular.toJson(label));
        return $http.post('reportLibrary/createlabel/', { params: label }, {

        }).then(function (response) {
            return response.data;
        });
    };

以及未声明参数的以下内容

function addLabel(label) {
        var mylabel = encodeURIComponent(angular.toJson(label));
        return $http.post('reportLibrary/createlabel/', label , {

        }).then(function (response) {
            return response.data;
        });
    };

在webAPI中我有一个帖子的方法设置

 [Route ("reportLibrary/createlabel/")]
        [HttpPost]
        public DTOs.ReportLabel CreateLabel(DTOs.ReportLabel json)
        {
            DTOs.ReportLabel result = new DTOs.ReportLabel();

        //.... do stuff
            return result;
        }

ReportLabel(dto)定义如下:

public class ReportLabel
{
    public Int64 LabelId { get; set; }
    public string LabelName { get; set; }
    public bool IsPublic { get; set; }
    public IEnumerable<Report> Reports { get; set; }//placeholder?

}

我遇到的问题是当我从我的角度服务发布一个对象时,它在API中显示为null。如果我将方法中的类型更改为类似JToken或JObject的类型,则会显示值。

任何人都可以帮助我理解为什么当我定义它没有从角度传递的类型时?

感谢

1 个答案:

答案 0 :(得分:1)

看起来你可能正在做一个额外的步骤。你不需要在json中编码然后在json中传入

return $http.post('reportLibrary/createlabel/', { LabelId: 101, LabelName: 'myname' }, {

然后

 public DTOs.ReportLabel CreateLabel([FromBody]ReportLabel reportLabel)

查看经过的网络值,您应该在调试工具或fiddler中看到实际发布的值(表单值)。