В этой главе мы поймем, как настроить промежуточное программное обеспечение. Промежуточное программное обеспечение в ASP.NET Core контролирует, как наше приложение реагирует на HTTP-запросы. Он также может контролировать то, как выглядит наше приложение при возникновении ошибки, и это ключевой момент в том, как мы аутентифицируем и уполномочиваем пользователя выполнять определенные действия.
-
Промежуточное программное обеспечение — это программные компоненты, которые собираются в конвейер приложения для обработки запросов и ответов.
-
Каждый компонент выбирает, передавать ли запрос следующему компоненту в конвейере, и может выполнять определенные действия до и после вызова следующего компонента в конвейере.
-
Делегаты запросов используются для построения конвейера запросов. Делегаты запроса обрабатывают каждый HTTP-запрос.
-
Каждая часть промежуточного программного обеспечения в ASP.NET Core является объектом, и каждая часть играет очень специфическую, целенаправленную и ограниченную роль.
-
В конечном итоге нам нужно много промежуточного программного обеспечения, чтобы приложение работало надлежащим образом.
Промежуточное программное обеспечение — это программные компоненты, которые собираются в конвейер приложения для обработки запросов и ответов.
Каждый компонент выбирает, передавать ли запрос следующему компоненту в конвейере, и может выполнять определенные действия до и после вызова следующего компонента в конвейере.
Делегаты запросов используются для построения конвейера запросов. Делегаты запроса обрабатывают каждый HTTP-запрос.
Каждая часть промежуточного программного обеспечения в ASP.NET Core является объектом, и каждая часть играет очень специфическую, целенаправленную и ограниченную роль.
В конечном итоге нам нужно много промежуточного программного обеспечения, чтобы приложение работало надлежащим образом.
Теперь давайте предположим, что мы хотим регистрировать информацию о каждом запросе в нашем приложении.
-
В этом случае первым компонентом промежуточного программного обеспечения, которое мы могли бы установить в приложение, является компонент журналирования.
-
Этот регистратор может видеть все о входящем запросе, но есть вероятность, что регистратор просто собирается записать некоторую информацию и затем передать этот запрос следующему фрагменту промежуточного программного обеспечения.
В этом случае первым компонентом промежуточного программного обеспечения, которое мы могли бы установить в приложение, является компонент журналирования.
Этот регистратор может видеть все о входящем запросе, но есть вероятность, что регистратор просто собирается записать некоторую информацию и затем передать этот запрос следующему фрагменту промежуточного программного обеспечения.
-
Промежуточное программное обеспечение — это набор компонентов, присутствующих в этом конвейере обработки.
-
Следующее промежуточное ПО, которое мы установили в приложение, — это авторизатор.
-
Авторизатор может искать определенные cookie или токены доступа в заголовках HTTP.
-
Если авторизатор находит токен, он разрешает выполнение запроса. Если нет, возможно, авторизатор сам ответит на запрос кодом ошибки HTTP или кодом перенаправления, чтобы отправить пользователя на страницу входа.
-
Но, в противном случае, авторизатор передаст запрос следующему компоненту промежуточного программного обеспечения, который является маршрутизатором.
-
Маршрутизатор просматривает URL-адрес и определяет ваш следующий шаг.
-
Маршрутизатор просматривает приложение, чтобы что-то ответить, и если маршрутизатор не находит ничего, чтобы ответить, сам маршрутизатор может вернуть ошибку 404 Not Found .
Промежуточное программное обеспечение — это набор компонентов, присутствующих в этом конвейере обработки.
Следующее промежуточное ПО, которое мы установили в приложение, — это авторизатор.
Авторизатор может искать определенные cookie или токены доступа в заголовках HTTP.
Если авторизатор находит токен, он разрешает выполнение запроса. Если нет, возможно, авторизатор сам ответит на запрос кодом ошибки HTTP или кодом перенаправления, чтобы отправить пользователя на страницу входа.
Но, в противном случае, авторизатор передаст запрос следующему компоненту промежуточного программного обеспечения, который является маршрутизатором.
Маршрутизатор просматривает URL-адрес и определяет ваш следующий шаг.
Маршрутизатор просматривает приложение, чтобы что-то ответить, и если маршрутизатор не находит ничего, чтобы ответить, сам маршрутизатор может вернуть ошибку 404 Not Found .
пример
Давайте теперь возьмем простой пример, чтобы больше узнать о промежуточном программном обеспечении. Мы установили промежуточное программное обеспечение в ASP.NET, используя метод Configure нашего класса Startup .
using Microsoft.AspNet.Builder; using Microsoft.AspNet.Hosting; using Microsoft.AspNet.Http; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Configuration; namespace FirstAppDemo { public class Startup { public Startup() { var builder = new ConfigurationBuilder() .AddJsonFile("AppSettings.json"); Configuration = builder.Build(); } public IConfiguration Configuration { get; set; } // This method gets called by the runtime. // Use this method to add services to the container. // For more information on how to configure your application, // visit http://go.microsoft.com/fwlink/?LinkID=398940 public void ConfigureServices(IServiceCollection services) { } // This method gets called by the runtime. // Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app) { app.UseIISPlatformHandler(); app.Run(async (context) => { var msg = Configuration["message"]; await context.Response.WriteAsync(msg); }); } // Entry point for the application. public static void Main(string[] args) => WebApplication.Run<Startup>(args); } }
Внутри метода Configure () мы будем вызывать методы расширения в интерфейсе IApplicationBuilder для добавления промежуточного программного обеспечения.
По умолчанию в новом пустом проекте есть два промежуточных ПО —
- IISPlatformHandler
- Промежуточное программное обеспечение зарегистрировано в app.Run
IISPlatformHandler
IISPlatformHandler позволяет нам работать с аутентификацией Windows. Он просматривает каждый входящий запрос и проверяет, есть ли какая-либо информация об идентификации Windows, связанная с этим запросом, а затем вызывает следующий компонент промежуточного программного обеспечения.
Промежуточное программное обеспечение зарегистрировано в app.Run
Следующий кусок промежуточного программного обеспечения в этом случае — это промежуточное ПО, зарегистрированное в app.Run . Метод Run позволяет нам передавать другой метод, который мы можем использовать для обработки каждого отдельного ответа. Run — это не то, что вы увидите очень часто, это то, что мы называем конечной частью промежуточного программного обеспечения.
Промежуточное программное обеспечение, которое вы регистрируете в Run, никогда не будет иметь возможности вызвать другой компонент промежуточного программного обеспечения, все, что он делает, — это получает запрос, а затем он должен произвести какой-то ответ.
Вы также получаете доступ к объекту Response, и одна из вещей, которые вы можете сделать с объектом Response, — это написать строку.
Если вы хотите зарегистрировать другую часть промежуточного программного обеспечения после app.Run, эта часть промежуточного программного обеспечения никогда не будет вызываться, потому что, опять же, Run является конечной частью промежуточного программного обеспечения. Это никогда не вызовет следующий кусок промежуточного программного обеспечения.
Как добавить еще одно промежуточное ПО
Давайте продолжим со следующих шагов, чтобы добавить другое промежуточное ПО —
Шаг 1. Чтобы добавить другое промежуточное ПО, щелкните правой кнопкой мыши проект и выберите «Управление пакетами NuGet».
Шаг 2. Поиск Microsoft.aspnet.diagnostics, который на самом деле является промежуточным программным обеспечением ASP.NET Core для обработки исключений, страниц отображения исключений и диагностической информации. Этот конкретный пакет содержит много разных промежуточных программ, которые мы можем использовать.
Шаг 3 — Установите этот пакет, если он не установлен в вашем проекте.
Шаг 4. Теперь перейдем к методу Configure () и вызовем промежуточное программное обеспечение app.UseWelcomePage .
// This method gets called by the runtime. // Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app) { app.UseIISPlatformHandler(); app.UseWelcomePage(); app.Run(async (context) => { var msg = Configuration["message"]; await context.Response.WriteAsync(msg); }); }
Шаг 5 — Запустите ваше приложение, и вы увидите следующий экран приветствия.
Этот экран приветствия может быть не таким полезным.
Шаг 6 — Давайте попробуем что-нибудь еще, что может быть немного более полезным. Вместо использования страницы приветствия мы будем использовать RuntimeInfoPage .
// This method gets called by the runtime. // Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app) { app.UseIISPlatformHandler(); app.UseRuntimeInfoPage(); app.Run(async (context) => { var msg = Configuration["message"]; await context.Response.WriteAsync(msg); }); }
Шаг 7 — Сохраните страницу Startup.cs и обновите браузер, и вы увидите следующую страницу.
Этот RuntimeInfoPage является промежуточным программным обеспечением, которое будет отвечать только на запросы, поступающие для определенного URL-адреса. Если входящий запрос не совпадает с этим URL-адресом, эта промежуточная программа просто пропускает запрос к следующей промежуточной программе. Запрос пройдет через промежуточное программное обеспечение IISPlatformHandler, а затем перейдет к промежуточному программному обеспечению UseRuntimeInfoPage. Он не собирается создавать ответ, поэтому он перейдет к нашему app.Run и отобразит строку.
Шаг 8 — Давайте добавим «/ runtimeinfo » в конце вашего URL. Теперь вы увидите страницу, созданную промежуточным программным обеспечением этой страницы информации о времени выполнения.
Теперь вы увидите ответ, содержащий некоторую информацию о вашей среде выполнения, такую как операционная система, версия времени выполнения, архитектура, тип и все используемые вами пакеты и т. Д.