Какой ASP.NET выбрать для проекта?
в чем разница и в чем преимущество одного над другим?
ASP.NET Core MVC
ASP.NET Core Razor Pages
ASP.NET Core Web Api
или Blazor
Ответы (1 шт):
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