在我的ASP.NET Core Web API中,我有一个实体Idea:
public class Idea
{
public int Id { get; set; }
public string Name { get; set; }
public string OwnerId { get; set; }
public User Owner { get; set; }
public string Description { get; set; }
public int? MainPhotoId { get; set; }
public Photo MainPhoto { get; set; }
public int? MainVideoId { get; set; }
public Video MainVideo { get; set; }
public ICollection<Photo> Photos { get; set; }
public ICollection<Video> Videos { get; set; }
public ICollection<Audio> Audios { get; set; }
public ICollection<Document> DocumentsAboutTheIdea { get; set; }
public DateTime DateOfPublishing { get; set; }
}
public class Photo
{
public int Id { get; set; }
public string Url { get; set; }
}
(the different media-type classes are equivalent)
当客户端发出创建构思的Post请求时,他会发送有关它的信息以及所有媒体文件(我正在使用IFormFile和IFormFileCollection),并在将它们保存在服务器上时设置Url属性以匹配它们地点。但在Get请求中我想发送文件(而不是Urls)。
以下是Get动作,现在只返回一个没有任何JSON且没有任何其他媒体文件的文件(mainPhoto):
[HttpGet("{id}", Name = "Get")]
public async Task<IActionResult> Get(int id)
{
var query = await unitOfWork.IdeaRepository.GetByIdAsync(id, includeProperties: "Owner,MainPhoto,MainVideo,Photos,Videos,Audios,DocumentsAboutTheIdea");
if (query != null)
{
string webRootPath = hostingEnvironment.WebRootPath;
var path = string.Concat(webRootPath, query.MainPhoto.Url);
var memory = new MemoryStream();
using (var stream = new FileStream(path, FileMode.Open))
{
await stream.CopyToAsync(memory);
}
memory.Position = 0;
return File(memory, GetContentType(path), Path.GetFileName(path));
}
return NotFound();
}
因此,在Get请求中,我想向客户端(Angular应用程序)发送一些有关JSON格式的Idea的信息,其中包含与之关联的不同(非一个)媒体文件。我的目标是让客户端得到所有这些,然后它可以在关于Idea的信息的页面上显示它们。但我无法弄清楚这个方法。有没有办法实现这个目标?或者还有另一种(更好的)与客户端交互的方式来传输所有需要的数据?我试图找到有关此主题的信息但找不到任何信息。