Какой 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