Как запустить веб-приложение ASP.NET (.NET Framework) вне IDE?
Раньше я создавал REST API с использованием шаблона «Веб-приложение ASP.NET Core» в Visual Studio 2019, но я не хочу устанавливать .NET Core для использования моего серверного приложения, поэтому я использовал шаблон .NET Framework.
Однако первый всегда создавал для меня исполняемый файл, который можно было запускать даже вне среды IDE. Сервер будет работать в окне консоли. Однако шаблон .NET Framework создает сборку только как DLL. Нет смысла переходить на «Консольное приложение» в настройках проекта, поскольку в шаблоне нет функции Main ().
Как мне заставить мой сервер работать вне IDE? Мне бы хотелось узнать, как запустить сервер с помощью функции Main (). Затем я мог бы реализовать класс ServiceBase, чтобы превратить мою программу в службу, что, в конечном счете, и есть то, что я хочу.
Я знаю, что есть способ «развернуть» сервер для работы с iis express, но я бы предпочел, чтобы он запускался сам из исполняемого файла.
nc404 21 Май 2021 в 18:27
Между exe и dll нет большой разницы. У exe просто есть точка входа main и другое расширение. Таким образом, вы можете либо создать новое консольное приложение, которое просто вызывает dll, либо добавить точку входа, чтобы сделать вашу dll, которая будет выполняться двойным щелчком dll. См. learn.microsoft .com/en-us/cpp/build/reference/… или learn.microsoft.com/en-us/dotnet/framework/interop/…
Создание веб-приложений с помощью ASP.NET Core для начинающих
Начало работы с веб-разработкой с помощью ASP.NET Core. В этом оптимизированном для начинающих пути обучения вы ознакомитесь с основами C#, HTML, Razor Pages и многим другим!
Предварительные требования
- Локальная установка пакета SDK для .NET.
Модули, включенные в эту схему обучения
Начните с написания примеров кода, чтобы узнать основы синтаксиса C#!
Выполните начальные действия по разработке веб-сайтов, создав простой веб-проект в Visual Studio Code, содержащий веб-страницу, CSS-файл и файл JavaScript. Узнайте, как использовать средства разработчика в браузере для проверка вашей работы.
В вашем распоряжении есть различные средства и отчеты, чтобы выявить проблемы, которые необходимо решить. Существуют также стандарты, такие как теги ARIA, которые сделают ваше приложение доступным для всех.
Узнайте, как создавать веб-страницы с помощью Razor с ASP.NET Core.
Создайте службу RESTful, которая поддерживает операции создания, чтения, обновления и удаления (CRUD), с помощью контроллеров ASP.NET Core.
Функции публикации в Visual Studio 2022 позволяют развертывать и администрировать размещенные в Azure веб-приложения ASP.NET Core.
- Светлая
- Темная
- Высокая контрастность
- Предыдущие версии
- Блог
- Участие в доработке
- Конфиденциальность
- Условия использования
- Товарные знаки
- © Microsoft 2023
- Светлая
- Темная
- Высокая контрастность
- Предыдущие версии
- Блог
- Участие в доработке
- Конфиденциальность
- Условия использования
- Товарные знаки
- © Microsoft 2023
Настройка приложения ASP.NET для службы приложений Azure
Сведения о ASP.NET Core см. в статье Настройка приложения ASP.NET Core для Служба приложений Azure. Если приложение ASP.NET выполняется в пользовательском контейнере Windows или Linux, см. статью Настройка пользовательского контейнера для Служба приложений Azure.
Приложения ASP.NET необходимо развертывать в службе приложений Azure как скомпилированные двоичные файлы. Средство публикации Visual Studio создает решение, а затем напрямую развертывает скомпилированные двоичные файлы, тогда как механизм развертывания службы приложений сначала развертывает репозиторий кода, а затем компилирует двоичные файлы.
В этом руководстве представлены ключевые концепции и инструкции для разработчиков ASP.NET. Если вы никогда не использовали службу приложений Azure, сначала ознакомьтесь с кратким руководством по ASP.NET и ASP.NET с базой данных SQL.
Показать поддерживаемые версии среды выполнения .NET Framework
В службе приложений на экземплярах Windows уже установлены все поддерживаемые версии .NET Framework. Чтобы показать доступные вам версии среды выполнения .NET Framework и SDK, перейдите к https://.scm.azurewebsites.net/DebugConsole и выполните соответствующую команду в консоли на основе браузера:
Для версий среды выполнения CLR 4 (.NET Framework 4 и выше):
ls "D:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework"
Последняя версия .NET Framework может быть недоступна сразу.
Для версий среды выполнения CLR 2 (.NET Framework 3.5 и ниже):
ls "D:\Program Files (x86)\Reference Assemblies\Microsoft\Framework"
Показать текущую версию среды выполнения .NET Framework
Выполните следующую команду в Cloud Shell:
az webapp config show --resource-group --name --query netFrameworkVersion
Значение v4.0 означает, что используется последняя версия CLR 4 (.NET Framework 4.x). Значение v2.0 означает, что используется версия CLR 2 (.NET Framework 3.5).
Установить версию среды выполнения .NET Framework
По умолчанию служба приложений использует последнюю поддерживаемую версию .NET Framework для запуска вашего приложения ASP.NET. Чтобы вместо этого запустить приложение с помощью .NET Framework 3.5, выполните следующую команду в Cloud Shell (v2.0 означает CLR 2):
az webapp config set --resource-group --name --net-framework-version v2.0
Доступ к переменным среды
В службе приложений вы можете установить параметры приложения и строки подключения вне кода приложения. Затем вы можете получить к ним доступ в любом классе, используя стандартный шаблон ASP.NET:
using System.Configuration; . // Get an app setting ConfigurationManager.AppSettings["MySetting"]; // Get a connection string ConfigurationManager.ConnectionStrings["MyConnection"]; >
Если вы настраиваете параметр приложения с тем же именем в службе приложений и в web.config, значение службы приложений имеет приоритет над значением web.config. Локальное значение web.config позволяет отлаживать приложение локально, а значение службы приложений позволяет запускать приложение в продукте с рабочими настройками. Строки подключения работают точно так же. Таким образом, вы можете хранить секреты своего приложения вне репозитория кода и получать доступ к соответствующим значениям без изменения кода.
Развертывайте многопроектные решения
Если решение Visual Studio включает несколько проектов, процесс публикации Visual Studio уже включает выбор проекта для развертывания. При развертывании в подсистеме развертывания Службы приложений, например с использованием Git или ZIP с включенной автоматизацией сборки, подсистема развертывания Службы приложений выбирает первый веб-сайт или проект веб-приложения, который оно находит, в качестве приложения Службы приложений. Чтобы указать, какую службу приложений проекта следует использовать, задайте параметр PROJECT приложения. Например, запустите в Cloud Shell следующее:
az webapp config appsettings set --resource-group --name --settings PROJECT="/.csproj"
Получить подробную страницу исключений
Когда ваше приложение ASP.NET создает исключение в отладчике Visual Studio, браузер отображает подробную страницу исключения, но в службе приложений эта страница заменяется общим сообщением об ошибке. Чтобы отобразить подробную страницу исключения в службе приложений, откройте файл Web.config и добавьте элемент под элементом . Пример:
Повторно разверните приложение с помощью обновленного файла Web.config. Теперь вы должны увидеть ту же подробную страницу исключения.
Доступ к журналам диагностики
Вы можете добавить диагностические сообщения в код вашего приложения с помощью System.Diagnostics.Trace. Пример:
Trace.TraceError("Record not found!"); // Error trace Trace.TraceWarning("Possible data loss"); // Warning trace Trace.TraceInformation("GET /Home/Index"); // Information trace
Чтобы получить доступ к журналам консоли, созданным в коде приложения в Службе приложений, включите ведение журнала диагностики, выполнив следующую команду в Cloud Shell:
az webapp log config --resource-group --name --docker-container-logging filesystem --level Verbose
Возможные значения для —level : Error , Warning , Info и Verbose . Каждый последующий уровень включает предыдущий уровень. Например: Error включает только сообщения об ошибках, а Verbose включает все сообщения.
Включив ведение журнала диагностики, выполните следующую команду, чтобы просмотреть поток данных журнала:
az webapp log tail --resource-group --name
Если журналы консоли не отображаются, проверьте еще раз через 30 секунд.
Вы также можете проверить файлы журнала в браузере на странице https://.scm.azurewebsites.net/api/logs/docker .
Чтобы остановить потоковую передачу журналов, нажмите клавиши Ctrl + C .
Дополнительные ресурсы
- Руководство. Создание приложения ASP.NET в Azure с подключением к базе данных SQL
- Справочные материалы по переменным среды и параметрам приложений
Запуск приложения в ASP.NET Core
Это не последняя версия этой статьи. В текущем выпуске см . версию .NET 8 этой статьи.
[!IMPORTANT] > This information relates to a pre-release product that may be substantially modified before it’s commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here. > > For the current release, see the [.NET 8 version of this article](?view=aspnetcore-8.0&preserve-view=true). . moniker-end —>
Автор: Рик Андерсон (Rick Anderson)
Приложения ASP.NET Core, созданные на основе веб-шаблонов, содержат код запуска приложения в файле Program.cs .
Следующий код запуска приложения поддерживает:
- страницы Razor;
- контроллеры MVC с представлениями;
- веб-API с контроллерами;
- Минимальные API
var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddRazorPages(); builder.Services.AddControllersWithViews(); var app = builder.Build(); // Configure the HTTP request pipeline. if (!app.Environment.IsDevelopment()) < app.UseExceptionHandler("/Error"); app.UseHsts(); >app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseAuthorization(); app.MapGet("/hi", () => "Hello!"); app.MapDefaultControllerRoute(); app.MapRazorPages(); app.Run();
Приложения, использующие EventSource, могут измерять время запуска, чтобы определить и оптимизировать его производительность. Событие ServerReady в Microsoft.AspNetCore.Hosting представляет точку, в которой сервер готов отвечать на запросы.
Дополнительные сведения о запуске приложения см. в статье Основы ASP.NET Core.
Расширение класса Startup с использованием фильтров запуска
Используйте IStartupFilter в следующих случаях:
- Чтобы настроить ПО промежуточного слоя в начале или конце конвейера по промежуточному слоя приложения без явного вызова Use . Используется IStartupFilter для добавления по умолчанию в начало конвейера без явной регистрации ПО промежуточного слоя по умолчанию. IStartupFilter разрешает другим компонентам вызывать Use от имени автора приложения.
- Для создания конвейера методов Configure . IStartupFilter.Configure может обеспечивать запуск ПО промежуточного слоя до или после ПО промежуточного слоя, добавляемого библиотеками.
IStartupFilter реализует метод Configure, который принимает и возвращает Action . IApplicationBuilder определяет класс для настройки конвейера запросов приложения. Дополнительные сведения см. в разделе Создание конвейера ПО промежуточного слоя с помощью IApplicationBuilder.
Каждый интерфейс IStartupFilter может добавлять один или несколько компонентов ПО промежуточного слоя в конвейер запросов. Фильтры вызываются в том порядке, в котором они были добавлены в контейнер службы. Фильтры могут добавлять ПО промежуточного слоя до или после передачи управления следующему фильтру, поэтому они добавляются в начало или конец конвейера приложения.
В следующем примере показана регистрация ПО промежуточного слоя с помощью IStartupFilter . ПО промежуточного слоя RequestSetOptionsMiddleware задает значения параметров из параметра строки запроса:
public class RequestSetOptionsMiddleware < private readonly RequestDelegate _next; public RequestSetOptionsMiddleware(RequestDelegate next) < _next = next; >// Test with https://localhost:5001/Privacy/?option=Hello public async Task Invoke(HttpContext httpContext) < var option = httpContext.Request.Query["option"]; if (!string.IsNullOrWhiteSpace(option)) < httpContext.Items["option"] = WebUtility.HtmlEncode(option); >await _next(httpContext); > >
RequestSetOptionsMiddleware настраивается в классе RequestSetOptionsStartupFilter :
namespace WebStartup.Middleware; // public class RequestSetOptionsStartupFilter : IStartupFilter < public ActionConfigure(Action next) < return builder =>< builder.UseMiddleware(); next(builder); >; > > //
Зарегистрировано IStartupFilter в Program.cs :
using WebStartup.Middleware; var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddTransient(); var app = builder.Build(); if (!app.Environment.IsDevelopment()) < app.UseExceptionHandler("/Error"); app.UseHsts(); >app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.MapRazorPages(); app.Run();
Если указан параметр строки запроса, option ПО промежуточного слоя обрабатывает назначение значений перед отображением ответа ASP.NET Core.
@page @model PrivacyModel @ < ViewData["Title"] = "Privacy Policy"; >@ViewData["Title"]
Append query string ?option=hello
Option String: @HttpContext.Items["option"];
Порядок выполнения ПО промежуточного слоя определяется порядком регистраций IStartupFilter :
- Несколько реализаций IStartupFilter могут взаимодействовать с одними и теми же объектами. Если важен порядок, упорядочите регистрации службы IStartupFilter в соответствии с требуемым порядком выполнения ПО промежуточного слоя.
- Библиотеки могут добавлять ПО промежуточного слоя с одной или несколькими реализациями IStartupFilter , которые выполняются до или после другого ПО промежуточного слоя приложения, зарегистрированного с помощью IStartupFilter . Чтобы вызвать ПО промежуточного слоя IStartupFilter до ПО промежуточного слоя, добавляемого библиотекой IStartupFilter , сделайте следующее:
- расположите регистрацию службы до добавления библиотеки в контейнер службы.
- Чтобы вызвать его после этого момента, расположите регистрацию службы после добавления библиотеки.
Примечание. Вы не можете расширить приложение ASP.NET Core при переопределении Configure . Дополнительные сведения см . в этой проблеме с GitHub.
Добавление конфигурации из внешней сборки при запуске
Реализация IHostingStartup позволяет добавлять улучшения в приложение при запуске из внешней сборки за пределами файла приложения Program.cs . Дополнительные сведения см. в статье Использование начальных сборок размещения в ASP.NET Core.
Запуск, настройка служб и настройка
Сведения об использовании ConfigureServices и Configure методах с минимальной моделью размещения см. в следующих статье:
- Использование запуска с минимальной моделью размещения
- Версия этой статьи ASP.NET Core 5.0:
- Метод ConfigureServices
- Метод Configure
Приложения ASP.NET Core, созданные на основе веб-шаблонов, содержат код запуска приложения в файле Program.cs .
Следующий код запуска приложения поддерживает:
- страницы Razor;
- контроллеры MVC с представлениями;
- веб-API с контроллерами;
- Минимальные API
var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddRazorPages(); builder.Services.AddControllersWithViews(); var app = builder.Build(); // Configure the HTTP request pipeline. if (!app.Environment.IsDevelopment()) < app.UseExceptionHandler("/Error"); app.UseHsts(); >app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseAuthorization(); app.MapGet("/hi", () => "Hello!"); app.MapDefaultControllerRoute(); app.MapRazorPages(); app.Run();
Дополнительные сведения о запуске приложения см. в статье Основы ASP.NET Core.
Расширение класса Startup с использованием фильтров запуска
Используйте IStartupFilter в следующих случаях:
- Чтобы настроить ПО промежуточного слоя в начале или конце конвейера по промежуточному слоя приложения без явного вызова Use . Используется IStartupFilter для добавления по умолчанию в начало конвейера без явной регистрации ПО промежуточного слоя по умолчанию. IStartupFilter разрешает другим компонентам вызывать Use от имени автора приложения.
- Для создания конвейера методов Configure . IStartupFilter.Configure может обеспечивать запуск ПО промежуточного слоя до или после ПО промежуточного слоя, добавляемого библиотеками.
IStartupFilter реализует метод Configure, который принимает и возвращает Action . IApplicationBuilder определяет класс для настройки конвейера запросов приложения. Дополнительные сведения см. в разделе Создание конвейера ПО промежуточного слоя с помощью IApplicationBuilder.
Каждый интерфейс IStartupFilter может добавлять один или несколько компонентов ПО промежуточного слоя в конвейер запросов. Фильтры вызываются в том порядке, в котором они были добавлены в контейнер службы. Фильтры могут добавлять ПО промежуточного слоя до или после передачи управления следующему фильтру, поэтому они добавляются в начало или конец конвейера приложения.
В следующем примере показана регистрация ПО промежуточного слоя с помощью IStartupFilter . ПО промежуточного слоя RequestSetOptionsMiddleware задает значения параметров из параметра строки запроса:
public class RequestSetOptionsMiddleware < private readonly RequestDelegate _next; public RequestSetOptionsMiddleware(RequestDelegate next) < _next = next; >// Test with https://localhost:5001/Privacy/?option=Hello public async Task Invoke(HttpContext httpContext) < var option = httpContext.Request.Query["option"]; if (!string.IsNullOrWhiteSpace(option)) < httpContext.Items["option"] = WebUtility.HtmlEncode(option); >await _next(httpContext); > >
RequestSetOptionsMiddleware настраивается в классе RequestSetOptionsStartupFilter :
namespace WebStartup.Middleware; //
public class RequestSetOptionsStartupFilter : IStartupFilter < public ActionConfigure(Action next) < return builder =>< builder.UseMiddleware(); next(builder); >; > > // Зарегистрировано IStartupFilter в Program.cs :
using WebStartup.Middleware; var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddTransient(); var app = builder.Build(); if (!app.Environment.IsDevelopment()) < app.UseExceptionHandler("/Error"); app.UseHsts(); >app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.MapRazorPages(); app.Run();
Если указан параметр строки запроса, option ПО промежуточного слоя обрабатывает назначение значений перед отображением ответа ASP.NET Core.
@page @model PrivacyModel @ < ViewData["Title"] = "Privacy Policy"; >
@ViewData["Title"]
Append query string ?option=hello
Option String: @HttpContext.Items["option"];Порядок выполнения ПО промежуточного слоя определяется порядком регистраций IStartupFilter :
- Несколько реализаций IStartupFilter могут взаимодействовать с одними и теми же объектами. Если важен порядок, упорядочите регистрации службы IStartupFilter в соответствии с требуемым порядком выполнения ПО промежуточного слоя.
- Библиотеки могут добавлять ПО промежуточного слоя с одной или несколькими реализациями IStartupFilter , которые выполняются до или после другого ПО промежуточного слоя приложения, зарегистрированного с помощью IStartupFilter . Чтобы вызвать ПО промежуточного слоя IStartupFilter до ПО промежуточного слоя, добавляемого библиотекой IStartupFilter , сделайте следующее:
- расположите регистрацию службы до добавления библиотеки в контейнер службы.
- Чтобы вызвать его после этого момента, расположите регистрацию службы после добавления библиотеки.
Примечание. Вы не можете расширить приложение ASP.NET Core при переопределении Configure . Дополнительные сведения см. здесь на GitHub.
Добавление конфигурации из внешней сборки при запуске
Реализация IHostingStartup позволяет добавлять улучшения в приложение при запуске из внешней сборки за пределами файла приложения Program.cs . Дополнительные сведения см. в статье Использование начальных сборок размещения в ASP.NET Core.
Класс Startup настраивает службы и конвейер запросов приложения.
Класс Startup
Приложения ASP.NET Core используют класс Startup , который называется Startup по соглашению . Класс Startup :
- При необходимости содержит метод ConfigureServices для настройки служб приложения. Служба — многократно используемый компонент, обеспечивающий функциональность приложения. Службы регистрируются в ConfigureServices и используются в приложении с помощью внедрения зависимостей (DI) или ApplicationServices.
- Содержит метод Configure для создания конвейера обработки запросов приложения.
ConfigureServices и Configure вызываются средой выполнения ASP.NET Core при запуске приложения:
public class Startup < public Startup(IConfiguration configuration) < Configuration = configuration; >public IConfiguration Configuration < get; >public void ConfigureServices(IServiceCollection services) < services.AddRazorPages(); >public void Configure(IApplicationBuilder app, IWebHostEnvironment env) < if (env.IsDevelopment()) < app.UseDeveloperExceptionPage(); >else < app.UseExceptionHandler("/Error"); app.UseHsts(); >app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => < endpoints.MapRazorPages(); >); > >
Предыдущий пример предназначен для Razor Pages; версия для MVC похожа.
Класс Startup указывается при создании узла приложения. Класс Startup обычно указывается путем вызова метода WebHostBuilderExtensions.UseStartup / в построителе узлов.
public class Program < public static void Main(string[] args) < CreateHostBuilder(args).Build().Run(); >public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => < webBuilder.UseStartup(); >); >
Узел предоставляет службы, которые доступны конструктору классов Startup . Приложение добавляет дополнительные службы через ConfigureServices . Как службы узла, так и службы приложения доступны в Configure и во всем приложении.
При использовании универсального узла (IHostBuilder) в конструктор Startup могут внедряться только следующие типы служб:
- IWebHostEnvironment
- IHostEnvironment
- IConfiguration
public class Startup < private readonly IWebHostEnvironment _env; public Startup(IConfiguration configuration, IWebHostEnvironment env) < Configuration = configuration; _env = env; >public IConfiguration Configuration < get; >public void ConfigureServices(IServiceCollection services) < if (_env.IsDevelopment()) < >else < >> >
Большинство служб недоступны, пока не будет вызван метод Configure .
Несколько запусков
Когда приложение определяет отдельные классы Startup для различных сред (например, StartupDevelopment ), подходящий класс Startup выбирается во время выполнения. Класс, у которого суффикс имени соответствует текущей среде, получает приоритет. Если приложение выполняется в среде разработки и включает в себя оба класса — Startup и StartupDevelopment , используется класс StartupDevelopment . Дополнительные сведения см. в статье Использование нескольких сред.
Дополнительные сведения об узле см. в разделе Узел. Сведения об обработке ошибок во время запуска см. в разделе Обработка исключений при запуске.
Метод ConfigureServices
- Необязательно.
- Вызывается узлом перед методом Configure для настройки служб приложения.
- По соглашению используется для задания параметров конфигурации.
Узел может настраивать некоторые службы перед вызовом методов Startup . Дополнительную информацию см. в разделе Узел.
Для функций, нуждающихся в значительной настройке, существуют методы расширения Add в IServiceCollection. Например, AddDbContext, AddDefaultIdentity, AddEntityFrameworkStores и AddRazorPages:
public class Startup < public Startup(IConfiguration configuration) < Configuration = configuration; >public IConfiguration Configuration < get; >public void ConfigureServices(IServiceCollection services) < services.AddDbContext(options => options.UseSqlServer( Configuration.GetConnectionString("DefaultConnection"))); services.AddDefaultIdentity( options => options.SignIn.RequireConfirmedAccount = true) .AddEntityFrameworkStores(); services.AddRazorPages(); >
Добавление служб в контейнер службы делает их доступными в приложении и методе Configure . Службы разрешаются посредством внедрения зависимостей или из ApplicationServices.
Метод Configure
Метод Configure используется для указания того, как приложение реагирует на HTTP-запросы. Конвейер запросов настраивается путем добавления компонентов ПО промежуточного слоя в экземпляр IApplicationBuilder. IApplicationBuilder доступен для метода Configure , но он не зарегистрирован в контейнере службы. При размещении создается IApplicationBuilder и передается непосредственно в Configure .
Шаблоны ASP.NET Core настраивают конвейер с поддержкой следующих компонентов и функций:
- Страница со сведениями об исключении для разработчика
- обработчиков исключений;
- HTTP Strict Transport Security (HSTS)
- перенаправления HTTPS;
- Статические файлы
- ASP.NET Core MVC и Razor Pages
public class Startup < public Startup(IConfiguration configuration) < Configuration = configuration; >public IConfiguration Configuration < get; >public void ConfigureServices(IServiceCollection services) < services.AddRazorPages(); >public void Configure(IApplicationBuilder app, IWebHostEnvironment env) < if (env.IsDevelopment()) < app.UseDeveloperExceptionPage(); >else < app.UseExceptionHandler("/Error"); app.UseHsts(); >app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => < endpoints.MapRazorPages(); >); > >
Предыдущий пример предназначен для Razor Pages; версия для MVC похожа.
Каждый метод расширения Use добавляет один или несколько компонентов ПО промежуточного слоя в конвейер запросов. Например, UseStaticFiles настраивает ПО промежуточного слоя для обслуживания статических файлов.
Каждый компонент ПО промежуточного слоя в конвейере запросов отвечает за вызов следующего компонента в конвейере или замыкает цепочку, если это необходимо.
В сигнатуре метода Configure могут быть указаны дополнительные службы, такие как IWebHostEnvironment , ILoggerFactory или любые службы, определенные в ConfigureServices . Эти службы внедряются, если доступны.
Дополнительные сведения об использовании IApplicationBuilder и порядке обработки ПО промежуточного слоя см. в статье ПО промежуточного слоя ASP.NET Core.
Настройка служб без запуска
Для настройки служб и конвейера обработки запросов в построителе узлов вместо класса Startup можно использовать удобные методы ConfigureServices и Configure . Несколько вызовов ConfigureServices добавляются друг к другу. При наличии нескольких вызовов метода Configure используется последний вызов Configure .
public class Program < public static void Main(string[] args) < CreateHostBuilder(args).Build().Run(); >public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureAppConfiguration((hostingContext, config) => < >) .ConfigureWebHostDefaults(webBuilder => < webBuilder.ConfigureServices(services =>< services.AddControllersWithViews(); >) .Configure(app => < var loggerFactory = app.ApplicationServices .GetRequiredService(); var logger = loggerFactory.CreateLogger(); var env = app.ApplicationServices.GetRequiredService(); var config = app.ApplicationServices.GetRequiredService(); logger.LogInformation("Logged in Configure"); if (env.IsDevelopment()) < app.UseDeveloperExceptionPage(); >else < app.UseExceptionHandler("/Home/Error"); app.UseHsts(); >var configValue = config["MyConfigKey"]; >); >); >); >
Расширение класса Startup с использованием фильтров запуска
Используйте IStartupFilter в следующих случаях:
- Для настройки ПО промежуточного слоя в начале или конце конвейера ПО промежуточного слоя Configure приложения без явного вызова Use . ASP.NET Core использует IStartupFilter для добавления значений по умолчанию в начало конвейера, исключая необходимость явной регистрации ПО промежуточного слоя по умолчанию автором приложения. IStartupFilter разрешает другим компонентам вызывать Use от имени автора приложения.
- Для создания конвейера методов Configure . IStartupFilter.Configure может обеспечивать запуск ПО промежуточного слоя до или после ПО промежуточного слоя, добавляемого библиотеками.
IStartupFilter реализует метод Configure, который принимает и возвращает Action . IApplicationBuilder определяет класс для настройки конвейера запросов приложения. Дополнительные сведения см. в разделе Создание конвейера ПО промежуточного слоя с помощью IApplicationBuilder.
Каждый интерфейс IStartupFilter может добавлять один или несколько компонентов ПО промежуточного слоя в конвейер запросов. Фильтры вызываются в том порядке, в котором они были добавлены в контейнер службы. Фильтры могут добавлять ПО промежуточного слоя до или после передачи управления следующему фильтру, поэтому они добавляются в начало или конец конвейера приложения.
В следующем примере показана регистрация ПО промежуточного слоя с помощью IStartupFilter . ПО промежуточного слоя RequestSetOptionsMiddleware задает значения параметров из параметра строки запроса:
public class RequestSetOptionsMiddleware < private readonly RequestDelegate _next; public RequestSetOptionsMiddleware( RequestDelegate next ) < _next = next; >// Test with https://localhost:5001/Privacy/?option=Hello public async Task Invoke(HttpContext httpContext) < var option = httpContext.Request.Query["option"]; if (!string.IsNullOrWhiteSpace(option)) < httpContext.Items["option"] = WebUtility.HtmlEncode(option); >await _next(httpContext); > >
RequestSetOptionsMiddleware настраивается в классе RequestSetOptionsStartupFilter :
public class RequestSetOptionsStartupFilter : IStartupFilter < public ActionConfigure(Action next) < return builder =>< builder.UseMiddleware(); next(builder); >; > >
IStartupFilter регистрируется в контейнере службы в ConfigureServices.
public class Program < public static void Main(string[] args) < CreateHostBuilder(args).Build().Run(); >public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureAppConfiguration((hostingContext, config) => < >) .ConfigureWebHostDefaults(webBuilder => < webBuilder.UseStartup(); >) .ConfigureServices(services => < services.AddTransient(); >); >
Если указан параметр строки запроса для option , ПО промежуточного слоя обрабатывает присвоение значения до того, как ПО промежуточного слоя ASP.NET Core отображает ответ.
Порядок выполнения ПО промежуточного слоя определяется порядком регистраций IStartupFilter :
- Несколько реализаций IStartupFilter могут взаимодействовать с одними и теми же объектами. Если важен порядок, упорядочите регистрации службы IStartupFilter в соответствии с требуемым порядком выполнения ПО промежуточного слоя.
- Библиотеки могут добавлять ПО промежуточного слоя с одной или несколькими реализациями IStartupFilter , которые выполняются до или после другого ПО промежуточного слоя приложения, зарегистрированного с помощью IStartupFilter . Чтобы вызвать ПО промежуточного слоя IStartupFilter до ПО промежуточного слоя, добавляемого библиотекой IStartupFilter , сделайте следующее:
- расположите регистрацию службы до добавления библиотеки в контейнер службы.
- Чтобы вызвать его после этого момента, расположите регистрацию службы после добавления библиотеки.
Добавление конфигурации из внешней сборки при запуске
Реализация IHostingStartup позволяет при запуске добавлять в приложение улучшения из внешней сборки вне приложения класса Startup . Дополнительные сведения см. в статье Использование начальных сборок размещения в ASP.NET Core.
Дополнительные ресурсы
- Узел
- Использование нескольких сред в ASP.NET Core
- ПО промежуточного слоя ядра ASP.NET
- Ведение журнала в .NET Core и ASP.NET Core
- Конфигурация в ASP.NET Core
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
ASP.NET Core feedback
The ASP.NET Core documentation is open source. Provide feedback here.
Обратная связь
Отправить и просмотреть отзыв по