Какие методы жизненного цикла существуют в ASP.NET
Что проверяют
Какую версию платформы вы знаете и понимаете ли, что у приложения и у запроса разные жизненные циклы. Если вы начнёте с событий страницы Web Forms, следом спросят, как это устроено в ASP.NET Core, где этих событий нет.
Как отвечать
Отвечайте про ASP.NET Core и разложите жизненный цикл по уровням:
- хост: с .NET 6 это
WebApplication.CreateBuilder(), регистрация сервисов вbuilder.Services,builder.Build(), настройка конвейера иapp.Run(). КлассStartupсConfigureServicesиConfigureподдерживается, но это старый шаблон; - события хоста:
IHostApplicationLifetimeс токенамиApplicationStarted,ApplicationStopping,ApplicationStopped;IHostedServiceсStartAsyncиStopAsync;BackgroundServiceсExecuteAsync; с .NET 8 ещёIHostedLifecycleServiceс этапами до и после старта и остановки; - конвейер запроса: цепочка middleware в порядке вызовов
app.Use.... Типичный порядок: обработка исключений, HTTPS, статика, маршрутизация, CORS,UseAuthentication(),UseAuthorization(), эндпоинты; - фильтры MVC: авторизация, ресурсные фильтры, привязка модели,
OnActionExecutingиOnActionExecuted, фильтры исключений и результата. В Minimal API вместо нихIEndpointFilter; - время жизни зависимостей:
Singletonна приложение,Scopedна запрос,Transientна каждое внедрение. Контроллер создаётся на каждый запрос.
Конвейер Web Forms (PreInit, Init, Load, PreRender, Render, Unload) и события Global.asax вроде Application_Start упомяните как наследие .NET Framework из старых систем.
Где спотыкаются
Ставят UseAuthorization() раньше UseAuthentication() или CORS после авторизации. Код компилируется, но запросы получают неожиданные 401 и ошибки preflight.
Внедряют Scoped сервис, например DbContext, в синглтон или BackgroundService. Правильно создавать область через IServiceScopeFactory.CreateScope() на каждую единицу работы.
Кладут долгую работу прямо в StartAsync. Сервер не начнёт принимать запросы, пока она не закончится. А при остановке хост по умолчанию ждёт 30 секунд и отменяет токен, так что фоновые задачи должны его слушать.