Как дополнительно включить Файл в ответ WebAPI
Мой текущий веб-API уже отвечает на данные JSON, как показано ниже.
public HttpResponseMessage GetFieldInfo()
{
//....
return Ok(GetFieldsInstance()); //GetFieldsInstance returning with DTO class instance.
}
Теперь мне нужно включить файл вместе с ответом JSON. Я не смог найти ни одной ссылки, которая показывает, как включить файловый поток и JSON в один ответ.
Для файлового потока это будет работать, как показано ниже, но, не в состоянии найти способ, как включить свойство объекта JSON в файловый поток.
result = Request.CreateResponse(HttpStatusCode.OK);
result.Content = new StreamContent(new FileStream(localFilePath, FileMode.Open, FileAccess.Read));
result.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment");
result.Content.Headers.ContentDisposition.FileName = "FieldFile";
1 ответ
Решение
Вы можете преобразовать (сериализовать) файл в строку base64 и включить его в качестве свойства в ответ JSON.
public IHttpActionResult GetFieldInfo() {
//...
var model = new {
//assuming: byte[] GetBinaryFile(...)
data = Convert.ToBase64String(GetBinaryFile(localFilePath)),
result = "final",
//...other properties...
};
return Ok(model);
}
Затем клиент должен будет преобразовать (десериализовать) строку base64 обратно в нужный файл, который будет использоваться по желанию.
Обратите внимание, что в зависимости от размера файла он может значительно увеличить размер ответа, и клиент должен это учитывать.