Создать файл .json виртуально
Есть коллекция которую я сериализую в json в беке
var json = JsonConverter.Serialize(collection);
Была поставлена задача изменить метод так чтобы он возвращал не сериализованную строку с данными внутри а файл .json формата и вернул его таким фронту с именем. Но загвоздка в том что нельзя создавать на беке файл и размещать его где либо, нужно сделать так будто передал реальный файл во фронт, но без его создания. Есть какие то варианты решения задачи? Желательно с примерами реализации.
Ответы (3 шт):
Автор решения: Alexander Petrov
→ Ссылка
public HttpResponseMessage GetData()
{
// Помещаем данные в стрим
using var stream = new MemoryStream();
using var writer = new StreamWriter(stream);
var collection = new List<int> { 1, 2, 3 };
new JsonSerializer().Serialize(writer, collection);
// Используем стрим
var content = new StreamContent(stream);
content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
content.Headers.ContentDisposition.FileName = "data.json";
content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
var message = new HttpResponseMessage(HttpStatusCode.OK);
message.Content = content;
return message;
}
Автор решения: Pavel Mayorov
→ Ссылка
Просто возвращайте Microsoft.AspNetCore.Mvc.FileContentResult.
Автор решения: Venen
→ Ссылка
Помог вот этот вариант решения задачи
var json = JsonConvert.SerializeObject(collection);
byte[] masByte = Encoding.UTF8.GetBytes(json);
return File(masByte, "application/json", $"namefile_{DateTime.Now:MM/dd/yyyy}.json");