Поделиться через


Запуск приложения

Подсказка

Это фрагмент электронной книги "Blazor для разработчиков веб-форм ASP NET для Azure", доступной в документации .NET или в виде бесплатного PDF-файла, который можно загрузить и прочитать в автономном режиме.

Миниатюра обложки электронной книги для Blazor-for-ASP-NET-Web-Forms-Developers.

Приложения, написанные для ASP.NET, обычно имеют global.asax.cs файл, который определяет событие Application_Start, контролирующее, какие службы настроены и доступны как для отображения HTML, так и для обработки .NET. В этой главе рассматривается, как вещи немного отличаются с ASP.NET Core и Blazor Server.

Application_Start и веб-формы

Метод веб-форм Application_Start по умолчанию с течением времени расширил свои функции, чтобы справляться с многими задачами конфигурации. Новый проект веб-форм с шаблоном по умолчанию в Visual Studio содержит следующую логику конфигурации:

  • RouteConfig — маршрутизация URL-адресов приложения
  • BundleConfig — объединение и минификации CSS и JavaScript

Каждый из этих отдельных файлов находится в папке App_Start и запускается только один раз в начале приложения. RouteConfig В шаблоне проекта по умолчанию добавляется FriendlyUrlSettings для веб-форм, чтобы URL-адреса приложений могли опустить .ASPX расширение файла. Шаблон по умолчанию также содержит директиву, которая предоставляет постоянные коды состояния перенаправления HTTP (HTTP 301) для .ASPX страниц в дружественном URL-адресе с именем файла без расширения.

При использовании ASP.NET Core и Blazor эти методы либо упрощены и консолидированы в Startup класс, либо они устраняются в пользу распространенных веб-технологий.

Структура запуска сервера Blazor

Приложения Blazor Server находятся на вершине ASP.NET Core 3.0 или более поздней версии. ASP.NET веб-приложения Core настраиваются в Program.cs или через пару методов в Startup.cs классе. Ниже показан пример файла Program.cs :

using BlazorApp1.Data;
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Web;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddServerSideBlazor();
builder.Services.AddSingleton<WeatherForecastService>();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.MapBlazorHub();
app.MapFallbackToPage("/_Host");

app.Run();

Необходимые службы приложения добавляются в коллекцию WebApplicationBuilder экземпляра Services . Вот как настроены различные службы платформы ASP.NET Core с помощью встроенного контейнера внедрения зависимостей платформы. Различные методы добавляют службы, которые обеспечивают такие функции, как проверка подлинности, страницы Razor, маршрутизация контроллера MVC, а также взаимодействия с SignalR и Blazor Server, среди многих других. Этот метод не нужен в веб-формах, так как анализ и обработка файлов ASPX, ASCX, ASHX и ASMX были определены путем ссылки ASP.NET в файле конфигурации web.config. Дополнительные сведения о внедрении зависимостей в ASP.NET Core доступны в веб-документации.

После того как app построен builder, остальные вызовы к app выполняют настройку его HTTP-конвейера. С помощью этих вызовов мы последовательно объявляем промежуточное ПО, которое будет обрабатывать каждый запрос, отправленный в наше приложение. Большинство этих функций в конфигурации по умолчанию разбросаны по файлам конфигурации веб-форм и теперь находятся в одном месте для простоты ссылки.

Настройка пользовательской страницы ошибок больше не размещается в файле web.config, а теперь всегда отображается, если среда приложения не помечена как Development. Кроме того, приложения ASP.NET Core теперь настроены для обслуживания безопасных страниц с помощью TLS по умолчанию при вызове метода UseHttpsRedirection.

Затем неожиданно вызывается метод конфигурации для UseStaticFiles. В ASP.NET Core поддержка статических файлов (например, JavaScript, CSS и файлов изображений) должна быть явно включена, и по умолчанию доступны только файлы в папке wwwroot приложения.

Следующая строка — это первая строка, которая реплицирует один из вариантов конфигурации из веб-форм: UseRouting Этот метод добавляет маршрутизатор ASP.NET Core в конвейер, и его можно настроить либо здесь, либо в отдельных файлах, которые могут использоваться для маршрутизации. Дополнительные сведения о конфигурации маршрутизации см. в разделе "Маршрутизация".

Финальные app.Map* вызовы в этом разделе определяют конечные точки, на которых ASP.NET Core ожидает соединений. Эти маршруты — это доступные в Интернете адреса, к которым можно обратиться на веб-сервере и получить содержимое, обработанное .NET и возвращенное вам. Первая запись MapBlazorHub настраивает концентратор SignalR для предоставления как реального времени, так и постоянного подключения к серверу, где обрабатываются состояние и визуализация компонентов Blazor. Вызов MapFallbackToPage метода указывает веб-доступное расположение страницы, которая запускает приложение Blazor, а также настраивает приложение для обработки запросов, связанных с глубокими ссылками, с клиентской стороны. Можно увидеть работу этой функции, если открыть браузер и переместиться непосредственно к обрабатываемому маршруту Blazor в приложении, например, /counter в шаблоне проекта по умолчанию. Запрос обрабатывается резервной страницей _Host.cshtml , которая затем запускает маршрутизатор Blazor и отображает страницу счетчика.

Последняя строка запускает приложение, что-то, что не требуется в веб-формах (так как оно зависит от iis для запуска).

Обновление процесса bundleConfig

Технологии для объединения ресурсов, таких как таблицы стилей CSS и файлы JavaScript, значительно изменились; другие технологии предоставляют быстро развивающиеся инструменты и методы для управления этими ресурсами. Для этого рекомендуется использовать средство командной строки Node, например Grunt/ Gulp / WebPack, чтобы упаковать статические ресурсы.

Средства командной строки Grunt, Gulp и WebPack и связанные с ними конфигурации можно добавить в приложение, а ASP.NET Core будет спокойно игнорировать эти файлы во время процесса сборки приложения. Вы можете добавить вызов для запуска выполнения задач, добавив Target внутри файла проекта, с использованием синтаксиса, аналогичного следующему, который активирует скрипт gulp и целевой объект min внутри этого скрипта.

<Target Name="MyPreCompileTarget" BeforeTargets="Build">
  <Exec Command="gulp min" />
</Target>

Дополнительные сведения об обеих стратегиях управления файлами CSS и JavaScript доступны в документации Сжатие и минификация статических ресурсов в ASP.NET Core.