В преддверии старта курса C# ASP.NET Core разработчик подготовили традиционный перевод полезного материала.
Также приглашаем на открытый вебинар по теме Отличия структурных шаблонов проектирования на примерах. На вебинаре участники вместе с экспертом рассмотрят три структурных шаблона проектирования: Заместитель, Адаптер и Декоратор; а также напишут несколько простых программ и проведут их рефакторинг.
Введение
Program.cs это место, с которого начинается приложение. Файл
Program.cs в ASP.NET Core работает так же, как файл Program.cs в
традиционном консольном приложении .NET Framework. Файл Program.cs
является точкой входа в приложение и отвечает за регистрацию и
заполнение Startup.cs, IISIntegration и создания хоста с помощью
инстанса IWebHostBuilder, метода Main
.
Global.asax больше не входит в состав приложения ASP.NET Core. В ASP.NET Core заменой файла Global.asax является файл Startup.cs.
Файл Startup.cs это также точка входа, и он будет вызываться после выполнения файла Program.cs на уровне приложения. Он обрабатывает конвейер запросов. Класс Startup запускается в момент запуска приложения.
Описание
Что такое Program.cs?
Program.cs это место, с которого начинается приложение. Файл класса Program.cs является точкой входа в наше приложение и создает инстанс IWebHost, на котором размещается веб-приложение.
public class Program { public static void Main(string[] args) { BuildWebHost(args).Run(); } public static IWebHost BuildWebHost(string[] args) => WebHost.CreateDefaultBuilder(args).UseStartup < startup > ().Build(); }
WebHost используется для создания инстансов IWebHost,
IWebHostBuilder и IWebHostBuilder, которые имеют предварительно
настроенные параметры. Метод CreateDefaultBuilder()
создает новый инстанс WebHostBuilder.
Метод UseStartup()
определяет класс
Startup
, который будет использоваться веб-хостом. Мы
также можем указать наш собственный пользовательский класс вместо
Startup.
Метод Build()
возвращает экземпляр IWebHost, а
Run()
запускает веб-приложение до его полной
остановки.
Program.cs в ASP.NET Core упрощает настройку веб-хоста.
public static IWebHostBuilder CreateDefaultBuilder(string[] args) { var builder = new WebHostBuilder().UseKestrel().UseContentRoot(Directory.GetCurrentDirectory()).ConfigureAppConfiguration((hostingContext, config) => { /* setup config */ }).ConfigureLogging((hostingContext, logging) => { /* setup logging */ }).UseIISIntegration() return builder; }
Метод UseKestrel()
является расширением, которое
определяет Kestrel как внутренний веб-сервер. Kestrel это
кроссплатформенный веб-сервер для ASP.NET Core с открытым исходным
кодом. Приложение работает с модулем Asp.Net Core, и необходимо
включить интеграцию IIS (UseIISIntegration()
), которая
настраивает базовый адрес и порт приложения.
Он также настраивает UseIISIntegration()
,
UseContentRoot()
,
UseEnvironment(Development)
, UseStartup()
и другие доступные конфигурации, например Appsetting.json и
Environment Variable. UseContentRoot
используется для
обозначения текущего пути к каталогу.
Мы также можем зарегистрировать логирование и установить минимальный loglevel, как показано ниже. Это также переопределитloglevel, настроенный в файле appsetting.json.
.ConfigureLogging(logging => { logging.SetMinimumLevel(LogLevel.Warning); })
Таким же образом мы можем контролировать размер тела нашего запроса и ответа, включив эту опцию файле program.cs, как показано ниже.
.ConfigureKestrel((context, options) => { options.Limits.MaxRequestBodySize = 20000000; });
ASP.net Core является кроссплатформенным и имеет открытый исходный код, а также его можно размещать на любом сервере (а не только на IIS, внешнем веб-сервере), таком как IIS, Apache, Nginx и т. д.
Что такое файл Startup?
Обязателен ли файл startup.cs или нет? Да, startup.cs является обязательным, его можно специализировать любым модификатором доступа, например, public, private, internal. В одном приложении допускается использование нескольких классов Startup. ASP.NET Core выберет соответствующий класс в зависимости от среды.
Если существует класс Startup{EnvironmentName}
,
этот класс будет вызываться для этого EnvironmentName
или будет выполнен файл Startup для конкретной среды в целом
(Environment Specific), чтобы избежать частых изменений
кода/настроек/конфигурации в зависимости от среды.
ASP.NET Core поддерживает несколько переменных среды, таких как
Development, Production и Staging. Он считывает переменную среды
ASPNETCORE_ENVIRONMENT
при запуске приложения и
сохраняет значение в интерфейсе среды хоста (into Hosting
Environment interface).
Обязательно ли этот класс должен называться
startup.cs
? Нет, имя класса не обязательно должно быть
Startup.
Мы можем определить два метода в Startup файле, например ConfigureServices и Configure, вместе с конструктором.
Пример Startup файла
public class Startup { // Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { ... } // Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app) { ... } }
Метод ConfigureServices
Это опциональный метод в классе Startup, который используется
для настройки сервисов для приложения. Когда в приложение поступает
какой-либо запрос, сначала вызывается метод
ConfigureService
.
Метод ConfigureServices
включает параметр
IServiceCollection
для регистрации сервисов. Этот
метод должен быть объявлен с модификатором доступа public, чтобы
среда могла читать контент из метаданных.
public void ConfigureServices(IServiceCollection services) { services.AddMvc(); }
Метод Configure
Метод Configure
используется для указания того, как
приложение будет отвечать на каждый HTTP-запрос. Этот метод в
основном используется для регистрации промежуточного программного
обеспечения (middleware) в HTTP-конвейере. Этот метод принимает
параметр IApplicationBuilder
вместе с некоторыми
другими сервисами, такими как IHostingEnvironment
и
ILoggerFactory
. Как только мы добавим какой-либо
сервис в метод ConfigureService
, он будет доступен для
использования в методе Configure
.
public void Configure(IApplicationBuilder app) { app.UseMvc(); }
В приведенном выше примере показано, как включить функцию MVC в
нашем фреймворке. Нам нужно зарегистрировать UseMvc()
в Configure и сервис AddMvc()
в
ConfigureServices
. UseMvc
является
промежуточным программным обеспечением. Промежуточное программное
обеспечение (Middleware) это новая концепция, представленная в
Asp.net Core. Для вас доступно множество встроенных промежуточных
программ, некоторые из которых указаны ниже.
app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); UseCookiePolicy(); UseSession();
Промежуточное программное обеспечение можно настроить в
http-конвейере с помощью команд Use
, Run
и Map
.
Run
Суть Run заключается в немедленном замыкании HTTP-конвейера. Это лаконичный способ добавления промежуточного программного обеспечения в конвейер, который не вызывает никакого другого промежуточного программного обеспечения, которое находится рядом с ним, и немедленно возвращает HTTP-ответ.
Use
Это передаст следующему (параметр next) делегату, так что HTTP-запрос будет передан следующему промежуточному программному обеспечению после выполнения текущего, если следующий делегат есть.
Map
Map просто принимает путь и функцию, которая конфигурирует отдельный конвейер промежуточного программного обеспечения.
app.Map("/MyDelegate", MyDelegate);
Чтобы получить более подробную информацию о промежуточном программном обеспечении, переходите сюда
ASP.net Core имеет встроенную поддержку внедрения зависимостей
(Dependency Injection
). Мы можем настроить сервисы для
контейнера внедрения зависимостей, используя этот метод. Следующие
способы конфигурационные методы в Startup
классе.
AddTransient
Transient (временные) объекты всегда разные; каждому контроллеру и сервису предоставляется новый инстанс.
Scoped
Scoped используются одни и те же объекты в пределах одного запроса, но разные в разных запросах.
Singleton
Singleton объекты одни и те же для каждого объекта и каждого запроса.
Можем ли мы удалить startup.cs и объединить все в один класс с Program.cs?
Ответ: Да, мы можем объединить все классы запуска в один файл.
Заключение
Вы получили базовое понимание того, почему файлы program.cs и
startup.cs важны для нашего приложения Asp.net Core и как их можно
настроить. Мы также немного познакомились с переменной среды
(Environment Variable), внедрение зависимостей, промежуточным
программным обеспечением и как его настроить. Кроме того, мы
увидели, как можно настроить UseIIsintegration()
и
UseKestrel()
.
Узнать подробнее о курсе C# ASP.NET Core разработчик.
Смотреть открытый вебинар по теме Отличия структурных шаблонов проектирования на примерах.