Какой ASP.NET выбрать для проекта?

в чем разница и в чем преимущество одного над другим?

ASP.NET Core MVC
ASP.NET Core Razor Pages
ASP.NET Core Web Api
или Blazor

Ответы (1 шт):

Автор решения: Faraday

ASP.NET MVC

Тип проекта, которые отлично подходит для интернет-магазинов, блогов, форумов и т.д. Основная его концепция в наличии контроллеров и страниц. Сама аббревиатура MVC расшифровывается как Model-View-Controller, что как бы буквально даёт понимание насчёт того, с чем вы будете работать

Основное отличие между ASP.NET Razor Pages в наличии контроллеров, но страницы присутствуют в обоих типах проектов.

Страницы является так называемыми результатами конечных точек вашего приложения. Каждая страница индексируется различными поисковиками, что позволяет выводить ваш сайт выше в поиске при поиске в браузере. Каждая страница должна иметь свой уникальный адрес (маршрут) и быть хорошо оптимизирована с точки зрения SEO (search engine optimization).

В общем говоря, в проектах типа ASP.NET MVC и ASP.NET Razor Pages конечным результатом работы сервера является html страница. Так же эти технологии используют SSR (server-side rendring), что позволяет подготовить страницу на стороне сервера перед тем, как выдать её конечному пользователю. Для работы над страницами в обеих технологиях используется Razor Pages Syntax.

ASP.NET Web Api

Тип проекта Api, которые так же имеет контроллеры, но результатом работы будут не страницы, а данные, в основном, в формате json. Такой тип проекта используется в основном для микросервисной архитектуры проекта. Иными словами, в связке с Web Api должен использовать ещё какой-то front-end framework, что-то на подобии React, Angualr или Vue.

Фреймворк работает с конечным пользователем и запрашивает данные в web api, после чего обрабатывает их для наилучшего представления их конечном пользователю.

Преимущество - быстродействие, по этому, в основном, используется для систем управления бизнесом, CRM систем и подобных внутренних/закрытых систем. Недостаток - очень плохая индексация. Роботы поисковики индексирую для поиска именно страницы, но фронтенд-фреймворки используют java script для генерации страниц и разметок, а это значит, что когда робот попытается проиндексировать ваш сайт, он увидит лишь один элемент

<div id="root"></div>

По этому такие типы проектом не подходят для сайтов, которые должны всегда быть как можно выше при поиске в браузере

ASP.NET Blazor

Для Blazor есть два вида - Blazor Server и Blazor Web Assembly. Основная цель существования Blazor это попытка замени фронтенд-фреймворков. По факту, это должно стоить где-то рядом с React, Angular и Vue и использоваться в связке с Web Api. Для работы частично используется Razor Syntax. Этот фреймворк больше сконцентрирован на работе с UI и разработке отдельных компонентов для многоразового использования

Заключение

Если вам нужна индексация страниц и работа с html, ваш выбор asp.net mvc или asp.net razor pages. Либо я бы выбрал первый вариант за счёт наличия контроллеров.

Если вам нужна какая-то закрытая система, crm система или подобное, смотрите в сторону asp.net web api. Для фронтенда используйте react, angular, vue или asp.net blazor

UPD

Из комментариев меня яростно попросили ещё объяснить, что у всех фреймворков, которые представлены выше, есть общая технология asp.net. В конфигурации каждого фреймворка вы можете увидеть примерно конфигурацию, которая выглядит примерно вот так:

var builder = WebApplication.CreateBuilder(args);

var app = builder.Build();

if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseAuthorization();

app.Run();

Для добавления поддержи некой технологии, конфигурация модернизируется. Вот так она будет выглядеть для добавления в проект razor pages страниц:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();

var app = builder.Build();

if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseAuthorization();

app.Run();

К примеру, для web api вот так:

builder.Services.AddControllers(); // часть для web api
builder.Services.AddEndpointsApiExplorer(); // нужно, что бы swagger видел ваши конечные точки
builder.Services.AddSwaggerGen(); // добавление самого swagger'а

Для blazor вот так:

services.AddRazorPages();
services.AddServerSideBlazor(); // для blazor server

Зачем это нужно? Если не самый, то достаточно распространённый пример использования это комбинация нескольких фреймворков в одном проекте. Если вы знакомы с React, Angular или Vue, вы должны знать, что компоненты этих фреймворков можно добавлять в ваш проект постепенно либо там, где это нужно.

Такие компоненты должны связываться с api и получать оттуда данные. Соответственно, в ваш mvc проект вы можете свободно добавить несколько web api контроллеров для взаимодействия с React, Angular или Vue.

Так при чём же тут вообще Blazor? Вы можете свободно заменить фронтенд-фреймворки на Blazor и использовать его в связке с остальными asp.net mvc и asp.net web api

→ Ссылка