为什么在将JSON发布到Web API方法时我得到null?

时间:2015-11-17 12:01:06

标签: angularjs asp.net-mvc asp.net-web-api asp.net-web-api2

我创建JSON并将其从cilent发送到web api方法。但是我在端点函数中得到NULL。

我有这个功能:

function genarateDirectives(workPlanServise) {
    var dataObj = {
        name: 'name',
        employees: 'employee',
        headoffice: 'master'
    };

    return workPlanServise.generateFilter(dataObj)
        .then(function (result) {
            return result.data;
        });
}

这是我使用的服务:

(function () {
    "use strict";

    angular.module("workPlan").factory("workPlanServise", ["$http", "config", workPlanServise]);

    function workPlanServise($http, config) {
        var serviceUrl = config.baseUrl + "api/workPlan/";
        var service = {
            getAll: getAll,
            getSubGridContent: getSubGridContent,
            generateFilter:generateFilter
        };
        return service;

        function getAll() {
            return $http.get(serviceUrl);
        }

        function getSubGridContent(clientId) {
            return $http.get(serviceUrl + '?clientId=' + clientId);
        }

        function generateFilter(objData) {
            return $http.post(serviceUrl, objData );
        }
    }
})();

这里结束了web api功能:

    [HttpPost]
    public async Task<IHttpActionResult> Post([FromBody]string objData) 
    {
        try
        {
            return null;
        }
        catch (Exception)
        {
            throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.InternalServerError));
        }
    }

任何想法为什么objData总是为空?

2 个答案:

答案 0 :(得分:2)

因为您将JSON对象绑定到一个无效的字符串。创建模型

public class MyModel
{
    public string Name { get; set; }

    public string Employees { get; set; }

    public string HeadOffice { get; set; }
}

并在没有[FromBody]属性的动作中使用它,因为默认情况下所有引用类型都是从主体绑定的。

public async Task<IHttpActionResult> Post(MyModel objData) 
{
    // work with objData here
}

答案 1 :(得分:1)

创建一个模型类,其字段与web api中的objData中的字段匹配。

web api模型活页夹将为您填充。不要忘记检查请求是否在标题中包含contentType:“application / json”。 (标准的$ http调用会有)

例如:

public class SomeModel
{
    public string Name { get; set; }

    public int Number { get; set; }

    public string Description { get; set; }
}

然后发布到:

[HttpPost]
public async Task<IHttpActionResult> Post(SomeModel objData) 
{ ....

如果你真的需要将一个字符串发布到Web api,你需要在你的请求的标题中传递text / plain而不是application / json,并在你的web api中添加一个额外的text / plain格式化程序。 See here for more info