You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Create a Blazor (ASP.NET Core hosted) Project, then change the Startup class of the .Server Project to enable server side features.
This doesn't have adverse effects on Client Side Blazor but enables the Server Side services.
For that you need to have services.AddServerSideBlazor(); in ConfigureServices and endpoints.MapBlazorHub(); in Configure
We can now serve Client Side and Server Side apps but we need to polyfil the HttpClient that is provided in DI in Client Side by default. Server Side doesn't register it by default so we detect this and then register an HttpClient in DI that behaves similiar for compatibility
// Server Side Blazor doesn't register HttpClient by defaultif(!services.Any(x =>x.ServiceType==typeof(HttpClient))){// Setup HttpClient for server side in a client side compatible fashionservices.AddScoped<HttpClient>(s =>{// Creating the URI helper needs to wait until the JS Runtime is initialized, so defer it.varuriHelper=s.GetRequiredService<NavigationManager>();returnnewHttpClient{BaseAddress=newUri(uriHelper.BaseUri)};});}
At this point, the only difference is which blazor JS file we load in the browser. This can be either achieved by serving a different index.html (for which i couldn't see an easy way) or using a small piece of JS to decide which file to load.
First, move the /wwwroot/Index.html from the client to the server /Pages/_Host.cshtml and update the App tag: