首页 > 解决方案 > 如何使用 ASP.NET Web API 将文件列表返回到 Angular 应用程序

问题描述

我做了一些研究,我很困惑。我的文件(图像和视频)存储在我的 Web API 项目目录中名为“资源/课程媒体”的文件夹中,这些文件的路径存储在 SQL Server 数据库中。我需要返回课程数据和要在 Angular 应用程序中显示的媒体文件列表。

这是 Course DTO 类,它应包含 Angular 请求所需的所有数据

public class CoursesDTO
    {
        public int Id { get; set; }
        public string CourseNumber { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
        public string TargetGroup { get; set; }
        public string Duration { get; set; }
        public decimal Price { get; set; }
        public string PartNumber { get; set; }
        //LIST OF MEDIA FILES
    }

这是我用来接收上传的课程数据和文件并将其存储在数据库和本地文件夹中的代码。

public class CoursesBL
    {
        private Context _context;

        public CoursesBL(Context context) => _context = context;

        public void Create(IFormCollection form)
        {
            try
            {
                Course course = new Course()
                {
                    Name = form["name"],
                    CourseNumber = form["courseNumber"],
                    Description = form["description"],
                    Duration = form["duration"],
                    Price = Decimal.Parse(form["price"]),
                    PartNumber = form["partNumber"],
                    TargetGroup = form["targetGroup"]
                };

                _context.Courses.Add(course);

                foreach (var file in form.Files)
                {
                    var folderName = Path.Combine("Resources", "Course Media");
                    var pathToSave = Path.Combine(Directory.GetCurrentDirectory(), folderName);

                    if (file.Length > 0)
                    {
                        var fileName = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.ToString().Trim('"');
                        var fullPath = Path.Combine(pathToSave, fileName);
                        var dbPath = Path.Combine(folderName, fileName);

                        using (var stream = new FileStream(fullPath, FileMode.Create))
                        {
                            file.CopyTo(stream);
                        }

                        _context.CourseMedia.Add(new CourseMedium
                        {
                            FileName = dbPath,
                            Title = file.Name,
                            Course = course
                        });
                    }
                    else
                    {
                        throw new Exception("BadRequest");
                    }
                }

                _context.SaveChanges();
            }
            catch (Exception e)
            {
                throw e;
            }
        }
    }

任何帮助将不胜感激。

标签: angularasp.net-web-api

解决方案


您只能请求获取一个文件,因为 HTTP 响应最多可以包含 1 个内容。

为了解决您的问题,您可以做的是 - 返回文件路径,对于每个文件,您可以提出单独的请求以获取内容响应以显示在 Angular 应用程序中。


推荐阅读