'Detecting server pre-rendering in Blazor server app

Is there any way to detect the pre-rendering is going on in a Blazor component from the OnInitializedAsync life cycle method? I know the component workflow would call OnInitializedAsync called two times, the first time for the pre-rendering and the second time for actual rendering. Finally, called the OnAfterRenderAsync method in a single time for actual rendering.

But, I need to detect the pre-rendering in OnInitializedAsync. So that I could make some changes in pre-rendering and prevent it in actual rendering vice versa.

I checked the below GitHub issue, but it doesn't have a valid solution. I hope, it should be addressed in an API like IsPrerendering.

https://github.com/dotnet/aspnetcore/issues/17282

Thanks in advance.



Solution 1:[1]

There is no API built in, but you can use the HTTP context to detect it.

I have wrapped this up in a nuget package here

https://www.nuget.org/packages/PreRenderComponent

Update:

Since this time, things have changed and, while there is still no api for detecting this, you should only perform external calls (like JSInterop and HTTP calls) once OnAfterRender/OnAfterRenderAsync has been called.

If you stick to this pattern, you don't ever need to know about pre-rendering status.

Solution 2:[2]

You can use the IHttpContextAccessor.HttpContext.Response.HasStarted property to check whether the application is pre-rendering or not. HasStarted specifies that the response header has been sent to the client. If HasStarted is set to false, it means that the application is still pre-rendering and client connection is not yet established.

Solution 3:[3]

To detect pre-rendering on Blazor server, I recommend to act according to the official documentation, here is quote:

Blazor Server apps that prerender their content call OnInitializedAsync twice:

  • Once when the component is initially rendered statically as part of the page.

  • A second time when the browser establishes a connection back to the server.

To prevent developer code in OnInitializedAsync from running twice, see the Stateful reconnection after prerendering section.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 srHunter
Solution 3 Vitalii Vagin