通过angularjs http请求在JSON体中发送byteArray

时间:2018-04-30 17:41:31

标签: angularjs httprequest

我想发送一个post请求,其中请求主体是一个包含两个属性的JSON,其中一个是使用fabricjs生成的画布信息,第二个是项目缩略图的byteArray。问题是,当我发送请求时,我在服务器端收到null

var dataURI = this.getDataUrl($rootScope.imageType, $rootScope.imageQuality);
var strImage = dataURI.replace(/^data:image\/[a-z]+;base64,/, "");
var byteArray = covertBase64ToByteArray(strImage);

var data = {
  data: {
    name: name,
    state: canvas.fabric.toJSON(['selectable', 'name']),
    zoom: canvas.zoom,
    canvasWidth: width,
    canvasHeight: height,
  },
  typeArray: byteArray
};

$http({
  method: "POST",
  url: _url,
  data: JSON.stringify(data),
  processData: false,
  transformRequest: [],
  contentType: 'application/json',
})

.Net中的后端代码

public IHttpActionResult InsertOrUpdateUILayout(long user_Id, long layout_Id, int userLayout_Id, int? layoutType_Id, UserlayoutContentVM data)
{
    // back end code here
}

public class UserlayoutContentVM
{
    public object data { get; set; }
    //public string base64Image { get; set; }
    public byte[] typeArray{ get; set; }      
}

1 个答案:

答案 0 :(得分:0)

将数据发布到后端api时,您需要告诉方法从请求正文中读取数据。 这可以使用FromBody属性来完成,该属性将正文数据映射到定义模型。

所以将所有属性添加到一个模型

public class UserlayoutContentVM
{
    public long user_Id { get; set; }
    public long layout_Id { get; set; }
    public int userLayout_Id { get; set; }
    public int? layoutType_Id { get; set; }
    public object data { get; set; }
    public byte[] typeArray{ get; set; }
}

然后确保客户端以相同的结构发送所有数据并使用控制器方法中的FromBody属性来读取值

public IHttpActionResult InsertOrUpdateUILayout([FromBody]UserlayoutContentVM data){ }