我试图弄清楚如何将对象从表单发布到Web api服务。在我的控制器中,我定义了一个想要向其添加输入值的模型。
$scope.Label;
在我的输入字段中,我将它们绑定起来,ng-model例如:
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之类的值,则会出现值。
谁能帮助我理解为什么当我定义不从angular传递过来的类型时?
谢谢
看来您可能正在执行额外的步骤。您不需要在json中编码,然后在json中传递
return $http.post('reportLibrary/createlabel/', { LabelId: 101, LabelName: 'myname' }, {
然后
public DTOs.ReportLabel CreateLabel([FromBody]ReportLabel reportLabel)
看一下经过的网络值,您应该在调试工具或提琴手中看到实际发布的值(表单值)。