我创建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总是为空?
答案 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