Новые возможности ASP.NET Core 2.1
В этой статье описываются наиболее важные изменения в ASP.NET Core 2.1 со ссылками на соответствующую документацию.
SignalR
SignalR переписан для ASP.NET Core 2.1.
В ASP.NET Core SignalR внесен ряд усовершенствований:
- Упрощенная модель горизонтального масштабирования.
- Новый клиент JavaScript без зависимости jQuery.
- Новый компактный двоичный протокол на базе MessagePack.
- Поддержка пользовательских протоколов.
- Новая модель потокового ответа.
- Поддержка клиентов на базе только протокола WebSocket.
Дополнительные сведения см. в статье об ASP.NET SignalR.
Библиотеки класса Razor
В ASP.NET Core 2.1 проще создать и включить пользовательский интерфейс на основе Razor в библиотеку, а затем использовать его сразу в нескольких проектах. Новый пакет SDK для Razor позволяет создавать файлы Razor в проекте библиотеки классов, который можно поместить в пакет NuGet. Представления и страницы в библиотеках обнаруживаются автоматически и могут переопределяться приложением. Благодаря интеграции компиляции Razor в сборку:
- Время запуска приложения значительно сократилось.
- Быстрые обновления для представлений и страниц Razor во время выполнения по-прежнему доступны в рамках рабочего процесса последовательной разработки.
Дополнительные сведения см. в статье Многоразовый интерфейс Razor в библиотеках классов в ASP.NET Core.
Библиотека пользовательского интерфейса Identity и формирование шаблонов
ASP.NET Core 2.1 предоставляет ASP.NET Core Identityв качестве библиотеки Razorклассов. Приложения, которые включают в себя Identity , могут применять новый Identity шаблон для выборочного добавления исходного кода, содержащегося в библиотеке IdentityRazor классов (RCL). Вы можете создать исходный код, чтобы изменить код и тем самым изменить поведение. Например, вы можете указать шаблону создать код, используемый при регистрации. Созданный код имеет приоритет над тем же кодом в RCL для Identity.
Приложения, которые не включают проверку подлинности, могут применить шаблон Identity, чтобы добавить пакет RCL для Identity. Вы можете выбрать, какой код Identity будет создан.
Дополнительные сведения см. в разделе Шаблоны Identity в проектах ASP.NET Core.
HTTPS
Благодаря повышенной безопасности и privacyвключению HTTPS для веб-приложений важно. В Интернете применение HTTPS все чаще становится обязательным. Сайты, не использующие HTTPS, считаются небезопасными. Браузеры (Chromium, Mozilla) требуют использования веб-компонентов в контексте безопасности. GDPR требует использования HTTPS для защиты пользователя privacy. В то время как использование HTTPS в рабочей среде становится обязательным, применение HTTPS при разработке помогает предотвратить проблемы с развертыванием (например, небезопасные ссылки). ASP.NET Core 2.1 включает ряд усовершенствований, упрощающих использование HTTPS в среде разработки и настройку HTTPS в рабочей среде. Дополнительные сведения см. в разделе Принудительное использование HTTPS.
Включено по умолчанию
Чтобы вам было проще разрабатывать безопасные веб-сайты, протокол HTTPS теперь включен по умолчанию. Начиная с версии 2.1, Kestrel ожидает передачи данных по адресу https://localhost:5001
, если присутствует локальный сертификат разработки. Сертификат разработки создается, когда:
- Вы впервые запускаете пакет SDK для .NET Core.
- Вы создаете его вручную с помощью нового средства
dev-certs
.
Запустите dotnet dev-certs https --trust
, чтобы установить доверие для сертификата.
Перенаправление и принудительное применение HTTPS
Веб-приложения обычно используют оба протокола — HTTP и HTTPS, но перенаправляют весь трафик HTTP на HTTPS. В версии 2.1 появилось специальное ПО промежуточного слоя, которое интеллектуально перенаправляет трафик на HTTPS, учитывая конфигурацию или порты связанного сервера.
Использование протокола HTTPS также можно гарантировать с помощью протокола HTTP Strict Transport Security (HSTS). HSTS указывает браузерам всегда переходить на сайт через HTTPS. В ASP.NET Core 2.1 добавлено ПО промежуточного слоя HSTS, которое поддерживает параметры для максимального возраста, дочерних доменов и списка предварительной загрузки HSTS.
Конфигурация для рабочей среды
В рабочей среде необходимо явно настроить HTTPS. В версии 2.1 добавлена схема конфигурации по умолчанию для настройки HTTPS для Kestrel. Можно настроить приложения, чтобы они использовали:
- Несколько конечных точек, включая URL-адреса. Дополнительные сведения см. в статье Реализация веб-сервера Kestrel: конфигурация конечных точек.
- Сертификат для использования HTTPS из файла на диске или из хранилища сертификатов.
GDPR
ASP.NET Core предоставляет API-интерфейсы и шаблоны, которые помогают соответствовать требованиям Общего регламента по защите данных в ЕС. Дополнительные сведения см. в разделе Поддержка общего регламента по защите данных в ASP.NET Core. В примере приложения показано, как использовать и тестировать большинство точек расширения для общего регламента по защите данных и API-интерфейсов, добавленных в шаблоны ASP.NET Core 2.1.
Интеграционные тесты
Добавлен новый пакет, который оптимизирует создание и выполнение тестов. Пакет Microsoft.AspNetCore.Mvc.Testing выполняет следующие задачи:
- Копирует файл зависимостей (*.deps) из протестированного приложения в папку bin тестового проекта.
- Задает корневую папку содержимого в корневой папке проекта тестируемого приложения, чтобы можно было найти статические файлы и страницы или представления при выполнении тестов.
- WebApplicationFactory<TEntryPoint> Предоставляет класс для упрощения начальной загрузки тестового приложения.TestServer
В следующем тесте используется xUnit для проверки того, что страница индексов загружается с кодом состояния успешного выполнения и правильным заголовком Content-Type:
public class BasicTests
: IClassFixture<WebApplicationFactory<RazorPagesProject.Startup>>
{
private readonly HttpClient _client;
public BasicTests(WebApplicationFactory<RazorPagesProject.Startup> factory)
{
_client = factory.CreateClient();
}
[Fact]
public async Task GetHomePage()
{
// Act
var response = await _client.GetAsync("/");
// Assert
response.EnsureSuccessStatusCode(); // Status Code 200-299
Assert.Equal("text/html; charset=utf-8",
response.Content.Headers.ContentType.ToString());
}
}
Дополнительные сведения см. в разделе Интеграционные тесты.
[ApiController], ActionResult<T>
В ASP.NET Core 2.1 добавлены новые соглашения программирования, с которыми проще создавать чистые и описательные веб-API. ActionResult<T>
— это новый тип, который разрешает приложениям возвращать либо тип ответа, либо любой другой результат действия (аналогично IActionResult), при этом по-прежнему указывая тип ответа. Также был добавлен атрибут [ApiController]
, с помощью которого можно принять соглашения и поведения для веб-API.
Дополнительные сведения см. в разделе Сборка веб-API с использованием ASP.NET Core.
IHttpClientFactory
ASP.NET Core 2.1 содержит новую службу IHttpClientFactory
, которая упрощает настройку и использование экземпляров HttpClient
в приложениях. В HttpClient
уже существует концепция делегирования обработчиков, которые можно связать друг с другом для исходящих HTTP-запросов. Фабрика:
- Упрощает регистрацию экземпляров
HttpClient
каждого именованного клиента. - Реализует обработчик Polly, который позволяет использовать политики Polly для повтора, размыкателя цепи и т. д.
Дополнительные сведения см. в разделе Инициирование HTTP-запросов.
Конфигурация транспорта Kestrel Libuv.
После выпуска ASP.NET Core 2.1 транспорт Kestrel по умолчанию основан не на Libuv, а на управляемых сокетах. Дополнительные сведения см. в статье Реализация веб-сервера Kestrel: конфигурация транспорта Libuv.
Построитель универсальных узлов
Добавлен построитель универсальных узлов (HostBuilder
). Построитель можно использовать для приложений, которые не обрабатывают HTTP-запросы (обмен сообщениями, фоновые задачи и т. д.).
Дополнительные сведения можно найти в статье Универсальный узел .NET.
Обновленные шаблоны SPA
Шаблоны одностраничных приложений для Angular и React обновляются, чтобы использовать стандартные структуры проектов и системы сборки для каждой платформы.
Шаблон Angular основан на интерфейсе командной строки Angular, а шаблон React основан на создании-react-app.
Дополнительные сведения см. в разделе:
Поиск в Razor Pages активов Razor
В версии 2.1 Razor Pages ищет ресурсы Razor (например, макеты и частично выполненные строки) в следующих каталогах в указанном порядке.
- Текущая папка Pages.
- /Pages/Shared/
- /Views/Shared/
Razor Pages в области
Razor Pages теперь поддерживает области. Чтобы увидеть пример областей, создайте новое веб-приложение Razor Pages с отдельными учетными записями пользователей. Веб-приложение Razor Pages с отдельными учетными записями пользователей включает /Areas/Identity/Pages.
Совместимая версия MVC
Метод SetCompatibilityVersion позволяет приложению принимать или отклонять потенциально критические изменения в поведении, появившиеся в ASP.NET Core MVC 2.1 или более поздних версий.
Дополнительные сведения см. в статье Совместимая версия для ASP.NET Core MVC.
Миграция с 2.0 на 2.1
См. раздел Миграция с ASP.NET Core 2.0 на 2.1.
Дополнительная информация:
Полный список изменений см. в статье Заметки о выпуске ASP.NET Core 2.1.
ASP.NET Core