发送字节数组到API

时间:2018-10-12 13:08:28

标签: asp.net-web-api2 fiddler

我正在将Web应用程序转换为移动应用程序。我们在Web应用程序中使用AjaxAsyncFileUpload将文档保存到服务器,其中AjaxAsyncFileUpload用于为我完成工作。这是代码

Dim fileData As Byte() =new Byte(AjaxAsyncFileUpload.FileContent.Length-1){}
AjaxAsyncFileUpload.FileContent.Read(fileData, 0, fileData.Length)

InvestmentDeclare.DocSize  = AjaxAsyncFileUpload.FileContent.Length
InvestmentDeclare.DocFileName = AjaxAsyncFileUpload.FileName
InvestmentDeclare.DocFileType = AjaxAsyncFileUpload.PostedFile.ContentType
InvestmentDeclare.Document = fileData

然后将其保存到我的数据库中。

现在,在将其转换为移动应用程序时(我也在移动应用程序中使用了c#),我无法传递字节数组。我正在使用提琴手进行测试。 我已附上image,说明我如何通过提琴手。在我的API POST方法中,我可以为文档变量获取一个空值,而我可以正确获取其余的值。

可能是什么问题?我不是以正确的Json格式传递字节吗?

在API中:

public class AddInvestmentDeclare
{
 public int EmployeeId { get; set; }
 public int YearId { get; set; }
 public int InvestmentId { get; set; }
 public List<EmpDocument> EmpDocuments { get; set; }
}

public class EmpDocument
{
 public byte[] Document { get; set; }
 public string DocumentFileName { get; set; }
 public long DocumentSize { get; set; }
 public string DocumentType { get; set; }
}

public HttpResponseMessage Post(int YearId, [FromBody]List<AddInvestmentDeclare> InvestmentDeclared)
{

在运行时检查InvestDeclared列表时,我看到该文档变量未填充,并且显示为空。我也附上了image

1 个答案:

答案 0 :(得分:0)

首先,设置您的API方法,使其仅接受一个包含所有数据的对象,而不是单独接受每个参数。

代替:

public HttpResponseMessage Post([FromUri]string AccordDbName, [FromUri]String PayCareDbName, [FromUri]...)

将其设置为:

public HttpResponseMessage Post(Data dataObject)

第二,尝试将文件作为base64string发送。 Here是示例。

您在JSON请求中的文件应如下所示:

{ "ID":46, 
  "Content":"JVBERi0xLjQNCjEgMCBvYm......"
}