如何从.NET Core Rest API发出流以在Angular中消费为可观察的



我想设置一个页面,不断从后端接收值,这样渲染的数据集就会随着时间的推移而增长,直到后端表示完成为止(这甚至可能永远不会发生(。类似于本文中的内容,但后端基于.NET Core。

因此,Angular服务一开始看起来是这样的。

@Injectable()
export class TheService {
constructor(private httpClient: HttpClient) {}
getStuff(): Observable<Thing[]> {
return this.httpClient.get<Thing[]>('http://localhost:3000/stuff');
}
getThing(): Observable<Thing> {
return this.httpClient.get<Thing>('http://localhost:3000/thing');
}
}

我遇到的问题是在后端。当我返回这组东西时,我最后提供Ok(),指定操作已成功完成,状态代码为200。现在,我想实现的是一次只返回一件东西(或者一系列东西,只要它不是要提供的所有东西的最后一套(。基本上,我希望在不完成连接的情况下从.NET API发出值。为了简单起见,我们甚至可以使用类型为String而不是Thing的响应。

是否可以使用";通常的";在.NET中?我认为默认的GET方法是这样的。

[HttpGet("stuff")]
public ActionResult<IEnumerable<Thing>> GetThing()
{
IEnumerable<Thing> output = ...;
return Ok(output);
}
[HttpGet("thing")]
public ActionResult<Thing> GetThing()
{
Thing output = ...;
return Ok(output);
}

我在谷歌上搜索过这件事,但没有发现任何关联。有很多资源涉及Angular方面和observables、RxJs等。所有连接.NET和Angular的示例都提供并最终确定连接类型。我找到的最好的一个链接在顶部,背面不使用.NET。不知怎么的,我开始怀疑这是非常简单的,或者几乎不可行。

如果您需要客户端和服务器之间的长期连接,您可以通过Pusher这样的工具来使用WebSockets,Pusher有一个可用的.NET库:https://github.com/pusher/pusher-http-dotnet

或者,您可以使用长轮询,尽管这效率要低得多,因为您间歇性地在服务器上查询更新。您基本上会设置一个Interval observable,每隔N秒发出一个请求,以检查服务器上的更新。

最新更新