【问题标题】:How to post an object to WebAPI如何将对象发布到 WebAPI
【发布时间】:2015-03-08 07:36:39
【问题描述】:

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

$scope.Label;

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

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

在提交表单时,这两个字段a 传递给我的服务并提交给我的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 之类的值,则会出现值。

谁能帮我理解为什么当我定义它不是从角度传递的类型时?

谢谢

【问题讨论】:

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


    【解决方案1】:

    看来您可能需要多做一步。你不需要在json中编码然后在json中传递

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

    然后

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

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

    【讨论】:

    • 这确实有效,但这似乎有点笨拙。如果我有一个有 10 或 20 个属性的对象怎么办?似乎应该有一种方法来传递对象与声明和设置每个属性/字段。我有兴趣查看其他选项
    • 我关心的不是它的笨拙,而是感觉就像魔术一样。 Microsoft 试图通过查找您如何传递数据然后尝试映射到它来简化它。我在传递参数方面从来没有取得过很大的成功,但我知道这是可能的。当我想要完全控制时,我使用表单集合(我在这里发布:peterkellner.net/2013/08/18/…
    猜你喜欢
    • 2012-11-14
    • 1970-01-01
    • 2020-11-25
    • 1970-01-01
    • 1970-01-01
    • 2017-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多