问题
I am making a chatroom App by the blazor server-side.
I want to show the online state of each user.
Now I can use the OnAfterRenderAsync
event to get a user has entered the page.
It seems there is not any exit
event in blazor lifecycle via https://docs.microsoft.com/en-us/aspnet/core/blazor/lifecycle?view=aspnetcore-3.1
Someone said I can use the Dispose
event to achieve it while it does work at all.
What's more, I have a crazy idea that using the window.onbeforeunload
event of js to invoke the blazor method.
I have no idea which one is best. Would you please give me a suggestion? Thank you.
回答1:
You should implement a CircuitHandler on the server for this.
You can find the documentation here https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.components.server.circuits.circuithandler?view=aspnetcore-3.1
It enables you to react to lifecycle events for the Circuit, which is the backbone of a Blazor Server connection.
Methods
OnCircuitClosedAsync(Circuit, CancellationToken)
Invoked when a new circuit is being discarded.
OnCircuitOpenedAsync(Circuit, CancellationToken)
Invoked when a new circuit was established.
OnConnectionDownAsync(Circuit, CancellationToken)
Invoked when a connection to the client was dropped.
OnConnectionUpAsync(Circuit, CancellationToken) Invoked when a connection to the client was established. - This method is executed once initially after OnCircuitOpenedAsync(Circuit, CancellationToken) and once each for each reconnect during the lifetime of a circuit.
来源:https://stackoverflow.com/questions/59980882/how-can-i-get-the-event-while-page-close-in-blazor-server-side