首页 > 解决方案 > Angular 请求数据丢失

问题描述

我的 Angular 项目有一个小问题。

当我从前端发出 Get 请求时,有时我的请求是完美的,有时却不是。举个例子:

当我要求这个时:

[HttpGet("fromfor/{userId}")]
        public async Task<ActionResult<IEnumerable<MessageDTO>>> GetMessagesFromForUsers(int userId)
        {
            var messages = await _context.Messages.ToListAsync();
            var messagesToReturn = new List<Message>();
            var destinations = await _context.Destinations.ToListAsync();

            if (messages == null)
                return NotFound();
            else
            {
                foreach (Message m in messages)
                {
                    if (m.AuthorId == userId)
                        messagesToReturn.Add(m);
                }
            }
            if (destinations == null)
                return NotFound();
            else
            {

                foreach (Destination d in destinations)
                {
                    if (d.UserId == userId)
                    {
                        var mess = await _context.Messages.Where(m => m.Id == d.MessageId).FirstOrDefaultAsync();
                        messagesToReturn.Add(mess);
                    }
                }
            }

            return messagesToReturn.ToDTO();

        }

有了这项服务:

getMessagesFromForUsers(userId: number) {
        return this.http.get<Message[]>(`${this.baseUrl}api/messages/fromfor/${userId}`).pipe(
            map(res => res.map(m => new Message(m))));
    }

一切都很好,我把所有的数据都发回了前面。(见最后的照片)

但是当我要求:

[HttpGet("{id}")]
        public async Task<ActionResult<MessageDTO>> GetOne(int id)
        {
            var mess = await _context.Messages.Where(m => m.Id == id).FirstOrDefaultAsync();
            if (mess == null)
                return NotFound();
            return mess.ToDTO();
        }

有了这项服务:

getMessageById(id: number) {
        return this.http.get<Message>(`${this.baseUrl}api/messages/${id}`).pipe(
            map(m => !m ? null : new Message(m)),
        );
    }

我从后端丢失了一个数据。它的目的地属性....

我试图理解,但现在超出了我的能力范围,我在这里找不到任何类似的东西可以帮助我......

我可以使用更多的代码行或一些屏幕来显示我的模型和 DTO 的情况,但要阅读的内容很多。

非常感谢您的阅读,也许对我有帮助!

第一个请求的响应

第二个请求的响应

标签: angulartypescript

解决方案


如果您想在请求消息时填写目的地,则需要将其明确包含在查询中:

 var mess = await _context
             .Messages.Include(r=> r.Destinations)
             .Where(m => m.Id == id)
             .FirstOrDefaultAsync();

推荐阅读