Если вы изучаете ASP.NET Core, я слежу за этим Gitter Channel (https://gitter.im/DotNetStudyGroup/aspnetcore).
Цель этого проекта — дать возможность программистам на .NET изучить новый стек ASP.NET Core с нуля прямо из кода. В основе стека ASP.NET Core заложено много возможностей. Не упустите их!
Я настоятельно рекомендую использовать Visual Studio Code (https://code.visualstudio.com/), чтобы поиграть с этими примерами, но это не обязательно. Вы также можете использовать Visual Studio 2017.
Примечание: если у вас возникнут проблемы с загрузкой пакетов или Nuget, попробуйте выполнить следующую команду nuget.exe locals -clear all
.
Есть новый раздел, посвящённый всем темам безопасности (1 пример) для ASP.NET Core (https://github.com/dodyg/practical-aspnetcore/tree/master/projects/security).
Существуют специальные примеры для ASP.NET Core MVC 2.1 (35 примеров) (https://github.com/dodyg/practical-aspnetcore/tree/master/projects/mvc), ASP.NET Core SignalR 2.1 (0 примеров) (https://github.com/dodyg/practical-aspnetcore/tree/master/projects/signalr) и Blazor (6 примеров) (https://github.com/dodyg/practical-aspnetcore/tree/master/projects/blazor). Остальные проекты здесь предназначены только для ASP.NET Core.
Чтобы запустить эти примеры, просто откройте консоль командной строки, перейдите в каждую папку и выполните команду dotnet watch run
.
В большинстве примеров здесь используется пакет Microsoft.AspNetCore
, который состоит из следующих компонентов:
Microsoft.AspNetCore.Diagnostics
Microsoft.AspNetCore.HostFiltering
Microsoft.AspNetCore.Hosting
Microsoft.AspNetCore.Routing
Microsoft.AspNetCore.Server.IISIntegration
Microsoft.AspNetCore.Server.Kestrel
Microsoft.AspNetCore.Server.Kestrel.Https
Microsoft.Extensions.Configuration.CommandLine
Microsoft.Extensions.Configuration.EnvironmentVariables
Microsoft.Extensions.Configuration.FileExtensions
Microsoft.Extensions.Configuration.Json
Microsoft.Extensions.Configuration.UserSecrets
Microsoft.Extensions.Logging
Microsoft.Extensions.Logging.Configuration
Microsoft.Extensions.Logging.Console
Microsoft.Extensions.Logging.Debug
Когда примеру требуются пакеты, которых нет в списке, они будут добавлены в файл проекта.
Все примеры в этом разделе требуют ASP.NET Core 2.2 Preview 3 (2.2.100-preview3-009430
). Загрузите его здесь (https://www.microsoft.com/net/download/dotnet-core/2.2).
Endpoint Routing (https://github.com/dodyg/practical-aspnetcore/tree/master/projects/2-2/endpoint-routing) Включите Endpoint Routing для своего приложения MVC Core. Вы получите более высокую производительность и больше функциональных возможностей в отношении маршрутизации.
Endpoint Routing — GetUriByAction (https://github.com/dodyg/practical-aspnetcore/tree/master/projects/2-2/endpoint-routing-2)
Используйте синглтон LinkGenerator
и его метод GetUriByAction
, чтобы создать ссылку на действие. Он будет соблюдать соглашение, используемое MVC, которое в данном примере является app.UseMvcWithDefaultRoute();
Endpoint Routing — GetUriByAction — 2 (https://github.com/dodyg/practical-aspnetcore/tree/master/projects/2-2/endpoint-routing-3)
Используйте синглтон LinkGenerator
и его метод GetUriByAction
, чтобы создать ссылку на действие. Этот пример использует различные комбинации атрибутов Route
и HttpGet
для создания различных ссылок.
Endpoint Routing — GetUriByAction — 3 (https://github.com/dodyg/practical-aspnetcore/tree/master/projects/2-2/endpoint-routing-4)
Покажите, как работать с маршрутом со значениями, используя LinkGenerator.GetUriByAction
. Если вы не работаете со значениями, генератор ссылок не создаст ссылку.
Endpoint Routing — GetTemplateByAction (https://github.com/dodyg/practical-aspnetcore/tree/master/projects/2-2/endpoint-routing-5)
Продемонстрируйте, как получить шаблон маршрута из существующего действия, используя LinkGenerator.GetTemplateByAction
и сгенерировать путь, используя эту информацию.
Endpoint Routing — GetPathByAction (https://github.com/dodyg/practical-aspnetcore/tree/master/projects/2-2/endpoint-routing-6) Показать, как работать с маршрутом с... Использование IServiceCollection.AddHttpClient для предоставления HttpClient
Используйте IServiceCollection.AddHttpClient, чтобы предоставить HttpClient для ваших классов.
Использование IServiceCollection.AddHttpClient для предоставления интерфейса-реализующих классов
Используйте IServiceCollection.AddHttpClient, чтобы обеспечить реализацию интерфейса HttpClient.
Как скрыть сообщения о состоянии при запуске веб-приложения
Можно скрыть сообщения о статусе при запуске вашего веб-приложения. Это небольшая полезная функция.
В этом разделе будут показаны новые функции ASP.NET Core 2.0. Это хорошее объяснение того, что нового в ASP.NET Core 2.0.
Hello World с Microsoft.AspNetCore.All пакетом
Если вы ориентируетесь на netcoreapp2.0, вы можете использовать метапакет Microsoft.AspNetCore.All, который загружает большинство необходимых пакетов для разработки системы ASP.NET Core/MVC (включая поддержку БД EF).
Он также добавляет следующие пакеты:
Installing Microsoft.IdentityModel.Logging 1.1.4.
Installing Microsoft.IdentityModel.Tokens 5.1.4.
Installing runtime.win-x64.runtime.native.System.Data.SqlClient.sni 4.4.0.
Installing runtime.win-x86.runtime.native.System.Data.SqlClient.sni 4.4.0.
Installing runtime.win-arm64.runtime.native.System.Data.SqlClient.sni 4.4.0.
Installing System.IdentityModel.Tokens.Jwt 5.1.4.
Installing System.Text.Encoding.CodePages 4.4.0.
Installing runtime.native.System.Data.SqlClient.sni 4.4.0.
Installing Microsoft.Azure.KeyVault.WebKey 2.0.7.
Installing Microsoft.Rest.ClientRuntime.Azure 3.3.7.
Installing Microsoft.Rest.ClientRuntime 2.3.8.
Installing SQLitePCLRaw.lib.e_sqlite3.v110_xp 1.1.7.
Installing SQLitePCLRaw.lib.e_sqlite3.linux 1.1.7.
Installing SQLitePCLRaw.lib.e_sqlite3.osx 1.1.7.
Installing SQLitePCLRaw.provider.e_sqlite3.netstandard11 1.1.7.
Installing Microsoft.IdentityModel.Protocols 2.1.4.
Installing Microsoft.NETCore.App 2.0.0-preview2-25407-01.
Installing Microsoft.NETCore.DotNetHostPolicy 2.0.0-preview2-25407-01.
Installing Microsoft.NETCore.Platforms 2.0.0-preview2-25405-01.
Installing NETStandard.Library 2.0.0-preview2-25401-01.
Installing Microsoft.NETCore.DotNetHostResolver 2.0.0-preview2-25407-01.
Installing Microsoft.Packaging.Tools 1.0.0-preview2-25401-01.
Installing System.Interactive.Async 3.1.1.
Installing SQLitePCLRaw.core 1.1.7.
Installing Microsoft.IdentityModel.Protocols.OpenIdConnect 2.1.4.
Installing SQLitePCLRaw.bundle_green 1.1.7.
Installing Microsoft.Azure.KeyVault 2.3.2.
Installing Microsoft.IdentityModel.Clients.ActiveDirectory 3.14.1.
Installing WindowsAzure.Storage 8.1.4.
Installing System.Data.SqlClient 4.4.0.
Installing Microsoft.NETCore.DotNetAppHost 2.0.0-preview2-25407-01.
В ASP.NET Core 2.0 это рекомендуемый способ запуска хоста:
public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseEnvironment("Development")
.Build();
}
Новый способ настройки логирования
Теперь вы настраиваете логирование в Program вместо Startup.Configure через ConfigureLogging.
Фильтрация логирования
Теперь можно настроить, что... Доступные методы в классе Startup
Hello World с пользовательским именем класса Startup.
Вам не обязательно называть свой класс Startup, подойдёт любой допустимый класс C#.
Hello World, реагирующий на несколько URL-адресов.
Настройте приложение так, чтобы оно реагировало на несколько URL.
Hello World с несколькими классами Startup.
Этот проект показывает, что вы можете создать несколько классов Startup и выбирать их при запуске в зависимости от ваших потребностей.
Hello World с использованием нескольких классов Startup в зависимости от среды.
В этом проекте показано, что можно создать несколько классов Startup и выбирать их при старте в зависимости от потребностей и среды (класс Startup должен называться Startup).
Hello World с выбором метода Configure на основе среды.
Проект демонстрирует возможность выбора метода Configure в одном классе Startup на основе окружения.
Hello World с выбором метода ConfigureServices на основе среды.
Проект демонстрирует возможность выбора метода ConfigureServices в одном классе Startup на основе окружения.
Пример реализации интерфейса IStartup.
Мы подробно рассматриваем класс Startup. Это пример того, как напрямую реализовать IStartup.
Hello World без класса Startup.
Почему? Потому что мы можем это сделать.
Hello world с IStartupFilter.
Используйте IStartupFilter для настройки промежуточного ПО. Это сложная тема. В этой статье делается попытка объяснить IStartupFilter. Я добавлю больше примеров, чтобы IStartupFilter стал более понятным.
Показывать ошибки во время запуска.
Покажите подробный отчёт об исключениях, возникающих на этапе запуска вашего веб-приложения. Это очень полезно во время разработки.
Показать информацию о соединении.
Перечислите информацию о подключении HTTP-запроса.
Настройки среды.
Установите среду приложения на «Разработка», «Производство» или другой режим непосредственно из кода.
Ведение журнала консоли.
Настройка базового ведения журнала в вашем приложении и отображение его на консоли.
Мы добавляем следующие зависимости: "Microsoft.Extensions.Logging": "1.1.0"
и "Microsoft.Extensions.Logging.Console": "1.1.0"
.
Используем IApplicationBuilder Run
, метод расширения для добавления терминального промежуточного программного обеспечения.
Консольное ведение журнала — без фреймворкового логирования.
Отфильтруйте фреймворк-логирование из вывода логов. Без фильтрации… Демонстрация встроенного механизма DI (Dependency Injection) в ASP.NET Core для обеспечения зависимостей для вашего middleware
Middleware 9
[https://github.com/dodyg/practical-aspnetcore/tree/master/projects/middleware-9]
Продемонстрировать, как использовать встроенный механизм DI (Dependency Injection) в ASP.NET Core, чтобы обеспечить зависимости для вашего middleware.
[https://github.com/dodyg/practical-aspnetcore/tree/master/projects/middleware-10]
Показать, что middleware является singleton.
Функции (8)
Функции — это набор объектов, которые можно получить из фреймворка во время выполнения и которые служат различным целям.
[https://github.com/dodyg/practical-aspnetcore/tree/master/projects/features-server-addresses]
Используйте эту функцию, чтобы получить список URL-адресов, на которые отвечает ваше приложение.
[https://github.com/dodyg/practical-aspnetcore/tree/master/projects/features-server-addresses-2]
Используйте интерфейс IServer для доступа к адресам серверов, когда у вас нет доступа к IApplicationBuilder.
[https://github.com/dodyg/practical-aspnetcore/tree/master/projects/features-server-request]
Получите подробную информацию о текущем запросе. Она имеет некоторое сходство с HttpContext.Request. Они не равны. HttpContext.Request имеет больше свойств.
[https://github.com/dodyg/practical-aspnetcore/tree/master/projects/features-connection]
Используйте IHttpConnectionFeature для получения локального IP/порта и удалённого IP/порта.
[https://github.com/dodyg/practical-aspnetcore/tree/master/projects/features-server-custom]
Создайте свою собственную пользовательскую функцию и передайте её от middleware.
[https://github.com/dodyg/practical-aspnetcore/tree/master/projects/features-server-custom-override]
Показывает, как вы можете заменить реализацию функции другой внутри конвейера запросов.
[https://github.com/dodyg/practical-aspnetcore/tree/master/projects/features-request-culture]
Используйте эту функцию для определения культуры веб-запроса через IRequestCultureFeature. Для этого требуется следующая зависимость: «Microsoft.AspNetCore.Localization»: «2.1.0».
[https://github.com/dodyg/practical-aspnetcore/tree/master/projects/features-session]
Используйте сеансы в своих middleware. Этот пример показывает базовое использование сеанса в памяти. Для этого требуются следующие зависимости: «Microsoft.AspNetCore.Session»: «1.1.0-» и «Microsoft.Extensions.Caching.Memory»: «2.1.0-».
Внедрение зависимостей (2)
ASP.NET Core живёт и умирает благодаря DI. Он опирается на библиотеку Microsoft.Extensions.DependencyInjection. Нет необходимости явно указывать эту зависимость в вашем project.json, потому что aspnetcore уже имеет этот пакет в качестве собственной зависимости.
[https://github.com/dodyg/practical-aspnetcore/tree/master/projects/dependency-injection-1]
Демонстрирует три регистрации времени жизни для встроенной функциональности DI: singleton (один и только навсегда), scoped (один в каждом запросе) и transient (новый каждый раз).
[https://github.com/dodyg/practical-aspnetcore/tree/master/projects/dependency-injection-3]
Зарегистрируйте все объекты, настроенные классами, реализующими определённый интерфейс (в этом примере — IBootstrap). Это полезно, когда у вас есть большое количество классов в проекте, которые нуждаются в регистрации. Вы можете зарегистрировать их рядом с тем местом, где они находятся (обычно в одной папке), вместо того чтобы регистрировать их где-то в гигантской регистрационной функции.
Примечание: пример 2 ожидается. Вдохновение ещё не пришло.
Поставщик файлов (2)
Мы будем иметь дело с различными типами поставщиков файлов, поддерживаемых ASP.NET Core.
[https://github.com/dodyg/practical-aspnetcore/tree/master/projects/file-provider-physical]
Доступ к информации о файлах в ваших веб-и контент-корнях.
[https://github.com/dodyg/practical-aspnetcore/tree/master/projects/file-provider-custom] Реализуйте простой и в значительной степени бессмысленный поставщик файлов. Это хорошая отправная точка для реализации собственного поставщика файлов.
Кэширование в памяти (также известное как локальный кэш) (4)
Эти образцы зависят от библиотеки Microsoft.Extensions.Caching.Memory. Пожалуйста, добавьте эту зависимость в свой файл project.json.
Это самое базовое кэширование, которое вы можете использовать, установив абсолютный или скользящий срок действия для вашего кэша. Абсолютное истечение срока удалит ваш кэш в определённый момент в будущем. Скользящее истечение срока удалит ваш кэш после периода бездействия.
"buildOptions": {
"emitEntryPoint": true,
"copyToOutput": ["cache-file.txt"]
}
Примечание: пример 1 ожидается. Вдохновение ещё не пришло.
Кэширование 3 — событие удаления кэша (https://github.com/dodyg/practical-aspnetcore/tree/master/projects/caching-3). Зарегистрируйте обратный вызов, когда кэшированное значение будет удалено.
Кэширование 4 — зависимость CancellationChangeToken (https://github.com/dodyg/practical-aspnetcore/tree/master/projects/caching-4). Свяжите несколько записей кэша с одной зависимостью, которую вы можете сбросить вручную.
Конфигурация (7) Этот раздел полностью посвящён конфигурации, от конфигурации памяти до INI, JSON и XML.
Конфигурация (https://github.com/dodyg/practical-aspnetcore/tree/master/projects/configuration). Это «привет, мир» конфигурации. Просто используйте конфигурацию на основе памяти и считывайте/записывайте значения в неё/из неё.
Конфигурация — параметры (https://github.com/dodyg/practical-aspnetcore/tree/master/projects/configuration-options). Используйте IOptions в самом простом виде.
Конфигурация — переменные среды (https://github.com/dodyg/practical-aspnetcore/tree/master/projects/configuration-environment-variables). Загрузите переменные среды и отобразите их все.
Конфигурация — файл INI (https://github.com/dodyg/practical-aspnetcore/tree/master/projects/configuration-ini).
Считайте из файла INI. Требуется взять новую зависимость: "Microsoft.Extensions.Configuration.INI" : "2.1.0"
.
Конфигурация — файл INI — параметры (https://github.com/dodyg/practical-aspnetcore/tree/master/projects/configuration-ini-options).
Читайте из файла INI (с вложенными ключами) и IOptions. Требуется взять две новые зависимости: "Microsoft.Extensions.Configuration.INI" : "2.1.0"
и "Microsoft.Extensions.Options.ConfigurationExtensions" : "2.1.0"
.
Конфигурация — XML-файл (https://github.com/dodyg/practical-aspnetcore/tree/master/projects/configuration-xml).
Прочитайте из XML-файла. Требуется взять новую зависимость: "Microsoft.Extensions.Configuration.Xml" : "2.1.0"
.
Примечание: этот поставщик конфигурации Xml не поддерживает повторяющиеся элементы.
Следующие настройки конфигурации будут нарушены:
<appSettings>
<add key="webpages:Version" value="3.0.0.0" />
<add key="webpages:Enabled" value="false" />
</appSettings>
С другой стороны, вы можете получить неограниченное количество вложенных элементов, а также атрибутов.
"Microsoft.Extensions.Configuration.Xml" : "2.1.0"
и "Microsoft.Extensions.Options.ConfigurationExtensions" : "2.1.0"
.Локализация и глобализация (6) Этот раздел посвящён языкам, культуре и т. д.
Требуется зависимость "Microsoft.AspNetCore.Localization": "2.1.0"
и "Microsoft.Extensions.Localization": "2.1.0"
, чтобы использовать встроенную функцию QueryStringRequestCultureProvider
. Этот пример поддерживает английский и французский языки.
Локализация — 3:
Демонстрация различий между культурой (Culture
) и культурой пользовательского интерфейса (UI Culture
).
Локализация — 4:
Использование встроенной функции CookieRequestCultureProvider
для переключения культуры запроса через cookie. Этот пример также поддерживает английский и французский языки.
Локализация — 5:
Пример использования переносимых объектов (PO-файлов) для поддержки локализации вместо громоздких файлов resx. Для этого примера требуется пакет OrchardCore.Localization.Core
. Также требуется ASPNET Core 2
.
Локализация — 6:
Продолжение предыдущего примера с контекстом, который позволяет возвращать разные строки для одного и того же ключа перевода.
URL Redirect/Rewriting (6):
Этот раздел посвящён тёмной магии перенаправления URL.
Rewrite:
Самый базовый пример перенаправления (возвращает HTTP 302), который перенаправляет всё на домашнюю страницу «/». Требуется дополнительная зависимость "Microsoft.AspNetCore.Rewrite" : "2.1.0-*"
. Если вы уже использовали маршрутизацию, рекомендуется ознакомиться с примерами маршрутизации.
Rewrite — 2:
Перенаправление (возвращает HTTP 302) всего, что имеет расширение, например, about-us.html или welcome.aspx, на домашнюю страницу (/). Также показано, как захватывать значения, соответствующие регулярному выражению.
Rewrite — 3:
Переписывание (возвращает HTTP 301) всего, что имеет расширение, например, about-us.html или welcome.aspx, на домашнюю страницу (/). Также показано, как захватывать значения, соответствующие регулярному выражению.
Rewrite — 4:
Постоянное перенаправление (возвращает HTTP 301) всего, что имеет расширение, например, about-us.html или welcome.aspx, на домашнюю страницу (/). Также показано, как захватывать значения, соответствующие регулярному выражению.
Rewrite — 5:
Реализация собственной логики перенаправления на основе реализации IRule
. Требуется дополнительная зависимость "Microsoft.AspNetCore.StaticFiles": "1.1.0"
для обслуживания изображений. Эта собственная логика перенаправления позволяет нам просто указывать имена файлов изображений без необходимости беспокоиться об их точном пути, например, 'xx.jpg' и 'yy.png'.
Rewrite — 6:
Реализация собственной логики перенаправления с использованием лямбда-выражений (аналогично Rewrite — 5). Требуется дополнительная зависимость "Microsoft.AspNetCore.StaticFiles": "1.1.0"
для обслуживания изображений. Эта собственная логика перенаправления позволяет нам просто указывать имена файлов изображений без необходимости заботиться об их точном пути, например, 'xx.jpg' и 'yy.png'.
Compression (1):
Включение возможности сжатия ответов ASP.NET Core. Эти примеры зависят от Microsoft.AspNetCore.ResponseCompression": "2.1.0
.
Default Gzip Output Compression:
Сжатие всего по умолчанию. Сжатие Gzip
Everything означает следующий вывод MIME:
Диагностика (6)
Эти образцы зависят от "Microsoft.AspNetCore.Diagnostics":"1.1.1"
.
Просто покажите страницу приветствия, чтобы указать, что приложение работает правильно. Этот образец не использует класс запуска просто потому, что это всего лишь однострочный код.
Покажите любое необработанное исключение на красиво оформленной странице с подробностями об ошибке. Используйте это только в среде разработки!
Используйте функцию IExceptionHandlerFeature
, предоставляемую Microsoft.AspNetCore.Diagnostics.Abstractions
, для создания пользовательской глобальной страницы исключений.
Аналогично предыдущему, за исключением того, что мы используем настраиваемую страницу ошибок, определённую в отдельном пути.
Используйте UseStatusCodePagesWithRedirects
. Внимание: этот метод расширения обрабатывает ваш код возврата статуса 5xx путём перенаправления его на определённый URL. Он не будет обрабатывать исключения вашего приложения в целом (для этого используйте UseExceptionHandler
— проверьте предыдущие образцы).
Здесь мы углубляемся в анализ промежуточных программ в конвейере запросов. Это немного сложно. Для этого требуются следующие пакеты:
Microsoft.AspNetCore.MiddlewareAnalysis
Microsoft.Extensions.DiagnosticAdapter
Microsoft.Extensions.Logging.Console
Статические файлы (6)
Требуется дополнительная зависимость для включения функциональности "Microsoft.AspNetCore.StaticFiles": "1.1.0"
.
Просто обслуживайте статические файлы (html, css, изображения и т. д.).
В этом проекте обслуживаются два статических файла: index.html и hello.css. Они хранятся в папке wwwroot
, которая является местоположением папки по умолчанию для этой библиотеки.
Чтобы получить к ним доступ, вы должны ссылаться на них напрямую, например, localhost:5000/index.html
и localhost:5000/hello.css
.
Разрешите перечисление и просмотр вашей папки wwwroot
.
Объединяет функциональность UseStaticFiles, UseDefaultFiles и UseDirectoryBrowser
.
Настройте способ отображения просмотра каталогов. В этом примере настраиваемое представление обрабатывает только плоский каталог. Мы рассмотрим более сложный сценарий в следующем образце.
Показать настраиваемый просмотр каталогов и обработать список каталогов, а также файлы.
Использовать просмотр каталогов по определённому пути с помощью DirectoryBrowserOptions.RequestPath
, например /browse
.
Веб-сокеты (5)
Мы собираемся изучить функциональность веб-сокетов, предоставляемую ASP.NET Core. Все образцы здесь требуют... Microsoft.AspNetCore.WebSockets
Предупреждение: Эти образцы представляют собой низкоуровневый код для работы с веб-сокетами. Для производственных целей используйте SignalR (https://github.com/aspnet/signalr). Да, скоро я буду работать над образцами SignalR.
Это самый простой код для работы с веб-сокетом, который вы можете написать. Он просто возвращает то, что вы отправили. Не обрабатывает закрытие соединения. Не обрабатывает данные, размер которых превышает размер буфера. Обрабатывает только текстовые полезные данные.
Мы улучшаем предыдущий образец, добавляя логирование в консоль (требуется пакет Microsoft.Extensions.Logging.Console) и обрабатывая данные, размер которых больше размера буфера. Я установил очень маленький размер буфера (4 байта), чтобы вы могли увидеть, как это работает.
Мы улучшаем предыдущий образец, включая широковещательную передачу. Здесь вы видите очень грубую функциональность чата.
Мы улучшаем предыдущий образец, обрабатывая событие закрытия, инициированное веб-клиентом.
Реализуйте элементарный одноканальный чат-сервер.
Серверные события (1)
Этот сервер будет отправлять приветствие «hello world» вечно.
Синдикации (2)
Мы используем новый пакет Microsoft.SyndicationFeed.ReaderWriter для чтения RSS-каналов и каналов ATOM.
Это наименьшее количество кода для чтения RSS-канала. Этот пример читает канал от изобретателя RSS Дейва Винера по адресу http://scripting.com/rss.xml.
В этом примере обрабатывается расширение Outline для RSS.
Разное (3)
Служите файлу Markdown как файлу HTML. Вы увидите, как можно создать полезное приложение, используя несколько основных возможностей aspnetcore.
Мы берём зависимость «Markdig»: «0.15.1».
Служит файлу Markdown как файл HTML. Имеет ту же функциональность, что и Markdown-сервер, но реализован с использованием компонента промежуточного программного обеспечения.
Мы берём зависимость «Markdig»: «0.15.1».
Ознакомьтесь с документацией о том, как написать собственное промежуточное программное обеспечение (https://docs.asp.net/en/latest/migration/http-modules.html).
Дайте ему строку, и он сгенерирует для вас безопасный хеш, например localhost:5000?password=mypassword.
Добавляем зависимость «Microsoft.AspNetCore.Identity»: «2.1.0», чтобы включить эту функциональность.
Веб-утилиты (2)
Эта секция показывает различные функции, доступные в Microsoft.AspNetCore.WebUtilities.
Эта утилита помогает вам безопасно генерировать строку запроса для вашего URL (ht Rehan Saeed).
Эта утилита возвращает HTTP-причины, указанные номером статуса.
Uri Helper (1)
В этой секции показаны различные методы, доступные на уровне UriHelper. Microsoft.AspNetCore.Http.Extensions.UriHelper
Get Display Url
Request.GetDisplayUrl() показывает полный URL-адрес с хостом, путём и строкой запроса текущего запроса. Он предназначен только для отображения.
Trimming (1)
В этом разделе показано, как можно уменьшить размер приложения с помощью Microsoft.Packagin.Tools.Trimming.
Trimming Microsoft.AspNetCore.All hello world application
Запустите dotnet publish
или dotnet build
и прочитайте вывод в терминале. Будет выведено что-то похожее на Trimmed 115 из 168 файлов для экономии 18,93 МБ. Окончательный размер приложения составляет 3,07 МБ
. Вы можете отключить обрезку, установив <TrimUnusedDependencies>true</TrimUnusedDependencies>
в значение false
в файле проекта.
Modules (2)
Этот раздел показывает, как создать подключаемую и расширяемую веб-систему с использованием системы Orchardcore Modules.
Modular Hello World
Запустите dotnet watch run
в папке web
. Этот пример показывает модуль, который просто выводит «hello world».
Проект module1
требует OrchardCore.Module.Targets
, а проект хоста web
требует OrchardCore.Application.Targets
и OrchardCore.Modules
.
Keeping track of anonymous users
Отслеживайте анонимных пользователей в своём ASP.NET Core (полезно в таких сценариях, как отслеживание корзины покупок) с помощью библиотеки ReturnTrue.AspNetCore.Identity.Anonymous.
Middleware (1)
Response Buffering
Используйте промежуточное ПО Microsoft.AspNetCore.Buffering 0.2.2 для реализации функции буферизации ответов. Это позволит вам изменять ответ после его записи.
Device Detection (1)
Образцы в этом разделе основаны на библиотеке Wangkanai.Detection.
Device Detection
Это самое базовое определение устройства. Вы сможете определить, является ли клиент настольным или мобильным клиентом.
Owin (1)
Все эти образцы требуют пакета Microsoft.AspNetCore.Owin. Эти низкоуровневые образцы в большинстве случаев не имеют отношения к вашей повседневной разработке ASP.NET Core.
Owin
Привет, мир, трудный путь.
Image Sharp (1)
Всем этим образцам требуется промежуточное программное обеспечение SixLabors.ImageSharp.Web. Это промежуточное ПО — отличный инструмент для обработки повседневных задач по обработке изображений.
Image-Sharp
Пример показывает, как включить функцию изменения размера изображения на вашем сайте. Это очень просто, и промежуточное ПО заботится о кэшировании и т. д.
Generic Host — это отличный способ разместить все виды долго выполняющихся задач и приложений, например, обмен сообщениями, фоновые задачи и т.д.
Этот раздел посвящён всем тонкостям Generic Host. Все примеры в этом разделе полагаются на пакет Microsoft.AspNetCore.App.
Hello World
Это эквивалент приветствия миру службы Generic Host.
Hello World using Console Lifetime
Использовать UseConsoleLifetime неявно.
Startup and Shutdown order Демонстрируется порядок запуска и остановки размещённых сервисов.
Запуск и остановка хоста. Демонстрируется программный запуск и остановка программы хоста.
Сервис с временным выполнением.
Демонстрируется обработка задачи через регулярные интервалы с использованием Task.Delay
.
Настройка хоста с помощью словаря. Демонстрируется способ внедрения значений конфигурации в хост с помощью словаря.
Настройка окружения.
Устанавливается окружение с использованием EnvironmentName.Development
, EnvironmentName.Production
или EnvironmentName.Staging
.
Настройка логирования. Настраивается логирование для универсального хоста.
Отслеживание событий IApplicationLifetime.
Внедряется IApplicationLifetime
и отслеживаются события ApplicationStarted
, ApplicationStopping
и ApplicationStopped
. Это важно для корректного завершения работы сервисов. Процесс завершения блокируется до завершения событий ApplicatinStopping
и ApplicationStopped
.
Другие ресурсы aspnetcore с примерами кода:
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )