angularjs $ http post对象始终为null

时间:2017-05-04 20:42:28

标签: angularjs http post

我正在尝试使用$ http帖子将对象发送到后端,但其中一个参数始终为null。我在保存新对象时以相同的方式格式化dto并且工作正常,但是当我尝试调用更新函数时它不起作用。我错过了什么?

这是我的控制器代码:

vm.postUpdateITSM = function (itsm) {
        $http({
            method: "POST",
            url: "api/sources/" + itsm.Id,
            data: {
                id: itsm.Id,
                dto: {
                    ConnectorType: itsm.Type,
                    SourceName: itsm.ServerName,
                    DisplayName: itsm.DisplayName,
                    Credentials: JSON.stringify(itsm.UserName,
                                                itsm.Password),
                    Url: itsm.URL,
                    Settings: JSON.stringify(itsm.ResolveAlerts ? itsm.ResolveAlerts : false,
                                             itsm.AcknowledgeAlerts ? itsm.AcknowledgeAlerts : false,
                                             itsm.SyncInterval,
                                             itsm.IncidentInterval,
                                             itsm.Status ? itsm.Status : "")
                }
            }
        });
    }

在后端:调用时dto始终为null。

public async Task<IHttpActionResult> Update(int id, [FromBody] SourceDto dto)
    {
        var source = Mapper.Map<Source>(dto);
        source.SourceID = id;
        source.ServerCount = "";
        var res = await SystemActors.SourceManager.Ask(new UpdateSource(source));

        var failure = res as Status.Failure;
        if (failure != null)
        {
            return InternalServerError();
        }
        var success = ((SqlResult<object>) res).Success;
        if (!success)
        {
            return Content(HttpStatusCode.BadRequest, "Failed to update source.");
        }

        return Ok(new ResponsePackage {Success = true});
    }

这是SourceDto类:

public class SourceDto
{
    public string ConnectorType { get; set; }
    public string SourceName { get; set; }
    public string DisplayName { get; set; }
    public string Credentials { get; set; }
    public string Url { get; set; }
    public string Settings { get; set; }
}

1 个答案:

答案 0 :(得分:1)

您的前端数据格式有点错误 - data参数应该只是您的ASP.NET控制器在[FromBody],您的SourceDto模型中所期望的对象 - 以及id应该是查询字符串:

    method: "POST",
        url: "api/sources/" + itsm.Id,
        data: {
                ConnectorType: itsm.Type,
                SourceName: itsm.ServerName,
                DisplayName: itsm.DisplayName,
                Credentials: JSON.stringify(itsm.UserName,
                                            itsm.Password),
                Url: itsm.URL,
                Settings: JSON.stringify(itsm.ResolveAlerts ? itsm.ResolveAlerts : false,
                                         itsm.AcknowledgeAlerts ? itsm.AcknowledgeAlerts : false,
                                         itsm.SyncInterval,
                                         itsm.IncidentInterval,
                                         itsm.Status ? itsm.Status : "")
        }
    });

ASP.NET会将请求正文应用于预期的模型 - 如果它不匹配,您将获得null

相关问题