Новые возможности 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.

Библиотека пользовательского интерфейса Identity и формирование шаблонов

ASP.NET Core 2.1 предоставляет ASP.NET Core Identity как библиотеку классов Razor. Приложения, включающие Identity, могут применить новый шаблон Identity для выборочного добавления исходного кода из библиотеки классов Identity (RCL) для Razor. Вы можете создать исходный код, чтобы изменить код и тем самым изменить поведение. Например, вы можете указать шаблону создать код, используемый при регистрации. Созданный код имеет приоритет над тем же кодом в RCL для Identity.

Приложения, которые не включают проверку подлинности, могут применить шаблон Identity, чтобы добавить пакет RCL для Identity. Вы можете выбрать, какой код Identity будет создан.

Дополнительные сведения см. в разделе Шаблоны Identity в проектах ASP.NET Core.

HTTPS

Учитывая повышенное внимание к безопасности и конфиденциальности, важно использовать HTTPS для веб-приложений. В Интернете применение HTTPS все чаще становится обязательным. Сайты, не использующие HTTPS, считаются небезопасными. Браузеры (Chromium, Mozilla) требуют использования веб-компонентов в контексте безопасности. Общий регламент по защите данных предписывает использовать HTTPS для защиты конфиденциальности пользователей. В то время как использование 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. Можно настроить приложения, чтобы они использовали:

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 (например, макеты и частично выполненные строки) в следующих каталогах в указанном порядке.

  1. Текущая папка Pages.
  2. /Pages/Shared/
  3. /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.