Как дополнительно включить Файл в ответ 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 обратно в нужный файл, который будет использоваться по желанию.

Обратите внимание, что в зависимости от размера файла он может значительно увеличить размер ответа, и клиент должен это учитывать.

Другие вопросы по тегам