首页 > 解决方案 > 关于signalR dotnet core的问题

问题描述

问题

设想:

问题:

当我通过 websocket 发送模型时静默失败(没有消息发送给客户端)。如果我设置为 null 导航属性,它工作正常:

    _context.Posts.Add(model);
    _context.SaveChanges();

    model.User.Posts = null;  // <- removing this line fails silently

    _hub.Clients.All.SendAsync("AddAsync", model);

我如何诊断发生了什么?有人知道是什么原因吗?


一些不必要的代码细节

User.cs

public Guid Id { get; set; }
// ...
public virtual List<Post> Posts { get; set; } = new List<Post>();

Post.cs

public Guid Id { get; set; }
// ...
public virtual User User { get; set; }

PostsController.cs

private IHubContext<PostsHub> _hub;
private DatabaseContext _context;

public PostsController(IHubContext<PostsHub> hub)
{
    _hub = hub;
}

// ...

[HttpPost]
public async Task<ActionResult> PostAsync([FromBody] Post model)
{
    // ...

    _context.Posts.Add(model);
    _context.SaveChanges();

    model.User.Posts = null;

    _hub.Clients.All.SendAsync("AddAsync", model);

    // ...
}

标签: asp.net-coreasp.net-core-signalr

解决方案


使用 json 将模型序列化为 json 并在发送之前再次将其反序列化为 Post 对象。如果有错误它应该在那里弹出,因为如果有依赖循环 json convert 应该抛出异常


推荐阅读