I'm still struggling to understand the difference between ASP.NET Core Hosted and Server-side Blazor. I know same question already exists, but it's not satisfying. In fact, I couldn't find the satisfying answer anywhere - the answers were more or less the same.
If hosted option uses server (IIS, Kestrel), then why server-side? Confusing... It's a shame that official documentation didn't shed the light either...
UPDATE
The confusion stems from the fact that we have THREE options to create Blazor application. After executing dotnew new --list
I get:
dotnet new blazorserver
(Blazor Server App)dotnet blazorwasm
(Blazor WebAssembly App)
However, there's a third option:
dotnet blazorwasm --hosted
(ordotnet blazor --hosted
)
It's the same as check box in Visual Studio when creating application:
The documentation says:
you have the option of configuring the app to use an ASP.NET Core backend by selecting the ASP.NET Core hosted check box
But no explanation was provided what does it mean...
Update
I see where you are coming from now. The confusion stems from the fact that you have an option called
--hosted
when using the client-hosted Blazor. This options means having Blazor to include ASP.NET Core runtime.Why this option? Because you can write an offline app (e.g. calculator app) that does not need any kind of connection to external services, making ASP.NET Core irrelevant. However, you might want to write an online app that accesses online DB, external APIs, do verification, etc. For these kind of apps, you will need an ASP.NET Core stack to support your app.
Check this FAQ: https://github.com/aspnet/Blazor/wiki/FAQ#q-can-i-use-blazor-with-aspnet-core-on-the-server
Original answer
They are two hosting models: server-hosted, and client-hosted.
The difference is whether the app is hosted in server, or in client. Server hosting means your app logic runs in the server (you can think of it similar to what Web Forms is), you click on a button, an "Ajax" call sends the request, the server receives the request, and sends back the updated page. However, here it uses SignalR not Ajax, which is a low level socket communication (read efficient). And instead of updating a whole page, it updates only the relevant parts (thus it is a single page application).
On the other hand, client hosting means your logic runs within the browser. Think of it as if your C# logic is converted into JS, and it is embedded in the page. So the logic runs in the browser. This is possible after the introduction of WebAssembly which you might want to read about.
Let's say you want to create a calculator app. Your server hosted app will then need to communicate with the server to calculate and get the result for each calculation, while the client hosted does not need, and calculates the result in browser.
You might wonder, why we have two options. The reason being that support for WebAssembly (which a client hosted app relies on) is either incomplete or non-existant in many browsers, and performance differs widely too.
https://caniuse.com/#feat=wasm