- PVSM.RU - https://www.pvsm.ru -
Совсем недавно мы обновили ASP.NET Core до версии 2.1. Один из создателей платформы, наш коллега Дэвид Фоулер поделился некоторыми её полезными особенностями, о которых мало кто знает. Кроме того, помимо 9 секретных фич ASP.NET Core, под катом вы найдете и список основных нововведений со всеми полезными ссылками. Присоединяйтесь!

Вышла версия 2.1 открытой платформы ASP.NET Core, и разработчик Дэвид Фоулер (David Fowler) поделился в «Твиттере» [1] ее некоторыми полезными особенностями, о которых мало кто знает. Безусловно, теперь платформа работает быстрее, но также появился ряд новых возможностей и передовых методов, которые стоит рассмотреть подробнее.
ASP.NET Core теперь работает с новой хостинговой моделью. Приложения .NET формируют и запускают хост [3].
Хост отвечает за запуск приложений и управление их жизненным циклом. Задача узла Generic Host состоит в том, чтобы отделить конвейерную обработку HTTP от API веб-хоста для того, чтобы иметь возможность создавать на хосте больше сценариев. Отправка сообщений, фоновые и другие задачи, не относящиеся к HTTP, работают лучше благодаря сквозным функциям Generic Host, таким как конфигурирование, внедрение зависимостей (DI) и логирование.
Это означает, что теперь для сценариев без веб-хостинга есть не только WebHost, но и Generic Host. При этом работа будет такой же удобной, как и с ASP.NET Core, но еще у вас появятся новые возможности, такие как DI, логирование и конфигурирование. Пример кода для Generic Host можно найти на GitHub [4].
С его помощью можно запускать длинные фоновые операции как в универсальном хосте, так и в ваших веб-приложениях. В ASP.NET Core 2.1 появилась поддержка [6] базового класса BackgroundService, который значительно облегчает создание длинного асинхронного цикла. Пример кода для Hosted Service также находится на GitHub [7].
Создавать [8] простую временную фоновую задачу:
public Task StartAsync(CancellationToken cancellationToken)
{
_logger.LogInformation("Timed Background Service is starting.");
_timer = new Timer(DoWork, null, TimeSpan.Zero,
TimeSpan.FromSeconds(5));
return Task.CompletedTask;
}
легко!
Теперь можно размещать ASP.NET Core внутри службы Windows! Многие пользователи просили добавить данную функцию. IIS вам больше не нужен, чтобы размещать все, что пожелаете. Взгляните на Microsoft.AspNetCore.Hosting.WindowsServices [10] на NuGet и подробную документацию [3] по размещению собственного приложения ASP.NET Core в Windows в качестве службы Windows без IIS.
public static void Main(string[] args)
{
var pathToExe = Process.GetCurrentProcess().MainModule.FileName;
var pathToContentRoot = Path.GetDirectoryName(pathToExe);
var host = WebHost.CreateDefaultBuilder(args)
.UseContentRoot(pathToContentRoot)
.UseStartup<Startup>()
.Build();
host.RunAsService();
}
Как всегда, простая и точная реализация с использованием источника на GitHub.
[assembly: HostingStartup(typeof(SampleStartups.StartupInjection))]
Это будет вам интересно, обязательно обратите на них внимание. Можно создавать пакеты, которые используются в качестве вспомогательных средств для исходного кода, распространяемого через shared source. Между собой мы называем их «пакеты shared source». Они используются в ASP.NET Core повсюду [12], когда к чему-то необходимо предоставить общий доступ, но при этом оно не должно быть общедоступно через API. Тогда ваш код будет использоваться, но не будет появляться зависимостей от конечного пакета.
Они используются в CSPROJ таким образом [13]. Обратите внимание на атрибут PrivateAssets [14]:
<PackageReference Include="Microsoft.Extensions.ClosedGenericMatcher.Sources" PrivateAssets="All" Version="" />
<PackageReference Include="Microsoft.Extensions.ObjectMethodExecutor.Sources" PrivateAssets="All" Version="" />
Если вам необходимо задействовать метод в типе через отражение, и этот метод может быть асинхронным, то вам поможет оптимизированная и гибкая функция ObjectMethodExecutor [16], которую мы используем повсеместно в кодовой базе ASP.NET Core.
Команда использует этот код в MVC, чтобы задействовать ваши методы контроллера. Они используют этот код в SignalR для задействования методов хаба. Она работает с синхронными и асинхронными методами. Она также может работать с пользовательскими ожидаемыми объектами и асинхронными рабочими процессами F#.
Небольшой и часто запрашиваемый метод. Если вам не нравится то, что выдается после запуска драйвера dotnet, когда вы размещаете веб-приложение (распечатываете информацию привязки), то вы можете использовать новый метод расширения SuppressStatusMessages.
WebHost.CreateDefaultBuilder(args)
.SuppressStatusMessages(true)
.UseStartup<Startup>();
В версии 2.1 стало проще настраивать параметры, для работы которых требуются сервисы. Раньше приходилось создавать тип, полученный с помощью IConfigureOptions , теперь можно сделать все это в ConfigureServices с помощью AddOptions ‹TOptions›
public void ConfigureServicdes(IServiceCollection services)
{
services.AddOptions<MyOptions>()
.Configure<IHostingEnvironment>((o,env) =>
{
o.Path = env.WebRootPath;
});
}
Обычно нет необходимости настраивать IHttpContext, но многие хотят знать, как это сделать [20], а некоторые считают, что это должно осуществляться автоматически. Он не регистрируется по умолчанию, так как его наличие приводит к снижению производительности. Однако в ASP.NET Core 2.1 был добавлен PR [21] для метода расширения, что облегчит процесс [22], если вы этого захотите.
services.AddHttpContextAccessor ();
Итак, ASP.NET Core 2.1 готова к выпуску [23].
Новые функции в этой версии:
Посмотрите список изменений в ASP.NET Core 2.1 [36] в документах ASP.NET Core, чтобы узнать больше об этих функциях. Полный список всех изменений в новой версии представлен в примечаниях к выпуску [37].
Попробуйте! Пройдите курс QuickStart [38]— и вы сможете создавать базовые веб-приложения за 10 минут.
Автор: sahsAGU
Источник [39]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/programmirovanie/285698
Ссылки в тексте:
[1] в «Твиттере»: https://twitter.com/davidfowl/status/1004232622845804544?s=12
[2] Универсальный узел .NET generic host: https://twitter.com/davidfowl/status/1004232943181561856
[3] запускают хост: https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/windows-service?view=aspnetcore-2.1&tabs=aspnetcore2x
[4] можно найти на GitHub: https://github.com/aspnet/Docs/tree/master/aspnetcore/fundamentals/host/generic-host
[5] Интерфейс IHOSTEDSERVICE: https://twitter.com/davidfowl/status/1004233301823852544
[6] появилась поддержка: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/host/hosted-services?view=aspnetcore-2.1
[7] находится на GitHub: https://github.com/aspnet/Docs/tree/master/aspnetcore/fundamentals/host/hosted-services/samples/
[8] Создавать: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/host/hosted-services?view=aspnetcore-2.1#timed-background-tasks
[9] Службы windows на .NET Core: https://twitter.com/davidfowl/status/1004233944085118976
[10] Microsoft.AspNetCore.Hosting.WindowsServices: https://www.nuget.org/packages/Microsoft.AspNetCore.Hosting.WindowsServices/
[11] IHOSTINGSTARTUP: https://twitter.com/davidfowl/status/1004235985150865408
[12] используются в ASP.NET Core повсюду: https://github.com/aspnet/Common/tree/ff87989d893b000aac1bfef0157c92be1f04f714/shared
[13] таким образом: https://github.com/aspnet/SignalR/blob/3d0f68b22c05b918c4e2637af0d879e34c0b48a2/src/Microsoft.AspNetCore.SignalR.Core/Microsoft.AspNetCore.SignalR.Core.csproj#L18-L19
[14] PrivateAssets: https://docs.microsoft.com/en-us/nuget/consume-packages/package-references-in-project-files#controlling-dependency-assets
[15] OBJECTMETHODEXECUTOR: https://twitter.com/davidfowl/status/1004237863913906176
[16] ObjectMethodExecutor: https://github.com/aspnet/Common/blob/ff87989d893b000aac1bfef0157c92be1f04f714/shared/Microsoft.Extensions.ObjectMethodExecutor.Sources/ObjectMethodExecutor.cs
[17] SUPPRESSSTATUSMESSAGES: https://twitter.com/davidfowl/status/1004239734384701440
[18] ADDOPTIONS: https://twitter.com/davidfowl/status/1004248179628392448
[19] IHTTPCONTEXT с ADDHTTPCONTEXTACCESSOR: https://twitter.com/davidfowl/status/1004259627012255745
[20] как это сделать: https://github.com/aspnet/Hosting/issues/793
[21] был добавлен PR: https://github.com/aspnet/HttpAbstractions/pull/947
[22] облегчит процесс: https://github.com/aspnet/HttpAbstractions/pull/947/commits/916065e0ae8e04a8f5e7631d97480a0d612a42af
[23] готова к выпуску: https://blogs.msdn.microsoft.com/webdev/2018/05/30/asp-net-core-2-1-0-now-available/
[24] SignalR: https://docs.microsoft.com/en-us/aspnet/core/signalr/?view=aspnetcore-2.1
[25] Библиотеки класса Razor: https://docs.microsoft.com/en-us/aspnet/core/mvc/razor-pages/ui-class?view=aspnetcore-2.1
[26] Библиотека идентификаторов пользовательских интерфейсов и автоматическая кодогенерация: https://docs.microsoft.com/en-us/aspnet/core/security/authentication/scaffold-identity?view=aspnetcore-2.1
[27] HTTPS : https://docs.microsoft.com/en-us/aspnet/core/security/enforcing-ssl?view=aspnetcore-2.1
[28] Добавление шаблонов для обеспечения соответствия некоторым требованиям общего положения о защите данных: https://docs.microsoft.com/en-us/aspnet/core/security/gdpr?view=aspnetcore-2.1
[29] Функциональная тестовая инфраструктура MVC: https://docs.microsoft.com/en-us/aspnet/core/testing/integration-testing?view=aspnetcore-2.1
[30] [ApiController]: https://docs.microsoft.com/en-us/aspnet/core/web-api/index?view=aspnetcore-2.1#annotate-class-with-apicontrollerattribute
[31] ActionResult<Т>: https://docs.microsoft.com/en-us/aspnet/core/web-api/action-return-types?view=aspnetcore-2.1#actionresultt-type
[32] IHttpClientFactory: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/http-requests?view=aspnetcore-2.1
[33] Kestrel в Sockets: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-2.1#transport-configuration
[34] Унифицированный хостинг-строитель: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/host/generic-host?view=aspnetcore-2.1
[35] Обновленные шаблоны SPA: https://docs.microsoft.com/en-us/aspnet/core/spa/?view=aspnetcore-2.1
[36] список изменений в ASP.NET Core 2.1: https://docs.microsoft.com/en-us/aspnet/core/aspnetcore-2.1
[37] примечаниях к выпуску: https://github.com/aspnet/Home/releases/tag/2.1.0
[38] курс QuickStart : https://www.microsoft.com/net/learn/apps/web/get-started
[39] Источник: https://habr.com/post/416443/?utm_campaign=416443
Нажмите здесь для печати.