【发布时间】:2016-03-29 20:34:52
【问题描述】:
我创建了一个名为Event 的类。我的Event 类包含Documents 的列表。 Document 是我创建的另一个类。每个Document 类都包含一个名为DocumentData 的类,该类具有一个名为FileData 的byte[] 类型的属性。
所以它看起来像这样:
myEventObj.Documents[0].DocumentData.FileData
现在我的控制器接受新的或更新的Events 只接受 json 数据,这对我的 Event 类中的所有内容都很好,除了FileData。
我有另一个接受文件上传的控制器。问题是,我没有简单的方法来链接我的第二个控制器接受的二进制文件数据并将其与发送到我的第一个控制器的Event 的FileData 属性配对。如何将它们组合起来,以便只调用一次我的网络服务来保存Event 以及任何文件数据?
这是我的事件控制器的 Post 和 Put 函数:
[HttpPost]
public IHttpActionResult Post(Event coreEvent) {
coreEvent.PrepareToPersist();
_unitOfWork.Events.Add(coreEvent);
_unitOfWork.Complete();
return Created("api/events/" + coreEvent.EventId, coreEvent);
}
[HttpPut]
public IHttpActionResult Put(Event coreEvent) {
coreEvent.PrepareToPersist();
_unitOfWork.Events.Update(coreEvent);
_unitOfWork.Complete();
return Ok(coreEvent);
}
这是处理文件上传的控制器的 Post 函数:
[HttpPost]
public async Task<IHttpActionResult> Post() {
if (!Request.Content.IsMimeMultipartContent()) {
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}
var provider = new MultipartMemoryStreamProvider();
try {
await Request.Content.ReadAsMultipartAsync(provider);
foreach (var file in provider.Contents) {
string filename = file.Headers.ContentDisposition.FileName.Trim('\"');
byte[] buffer = await file.ReadAsByteArrayAsync();
}
return Ok();
}
catch (System.Exception e) {
return InternalServerError(e);
}
}
如何将这些放在一起?
【问题讨论】:
-
@Eminem 该链接发布的解决方案不起作用。 NameValueCollection 和 HttpFileCollection 对象不填充。
-
你试过你的
Event控制器了吗?它应该可以工作,因为 JSON 序列化程序会自动处理二进制数据。如果您想发送手工制作的请求,请确保在创建 JSON 请求数据时使用 base64 对二进制数据进行编码。你可以使用System.Convert.ToBase64String(bytes)。
标签: c# json asp.net-web-api asp.net-web-api2