如何将文件集合+ JSON数据发送到客户端

时间:2018-06-15 19:07:25

标签: asp.net http asp.net-core-2.0 asp.net-core-webapi api-design

在我的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的信息的页面上显示它们。但我无法弄清楚这个方法。有没有办法实现这个目标?或者还有另一种(更好的)与客户端交互的方式来传输所有需要的数据?我试图找到有关此主题的信息但找不到任何信息。

0 个答案:

没有答案